zoukankan      html  css  js  c++  java
  • 卡常数

    作为第一篇非题解博客,确实有一点激动。。。

    1.什么是卡常数?

    百度上的定义:
    程序被卡常数,一般指程序虽然渐进复杂度可以接受,但是由于实现/算法本身的时间常数因子较大,使得无法在OI等算法竞赛规定的时限内运行结束。
    2.如何解决卡常数?
    1.改进算法本身(这应该是一句废话)
    2.register-这个我也不是特别了解,据说是寄存CPU中,从而使得读取更快,由于CPU较小,所以实际的意义不大,但是如果是频繁调用(例如循环),最好还是带上。。。
    3.快速读入和快速输出
      (1)快读
        首先先讲一件显然的事情:输入速度getchar>scanf>cin,那么我们就想能不能利用getchar来进行读入呢?
        先上代码(可以读取整数):(格式并不规范,理解就好。。。)
     1 inline int read()
     2 {
     3     int x=0,w=1;
     4     char ch;
     5     while(ch<'0'||ch>'9')
     6     {
     7         if(ch=='-')
     8             w=-1;
     9         ch=getchar();
    10     }
    11     while(ch>='0'&&ch<='9')
    12         x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    13     return x*w;
    14 }
    15 int a;
    16 a=read();

    在这里x用于记录大小(可以近似地认为是绝对值),而w用于记录正负,第一个while循环用于排除空格等无关字符的干扰,第二个用于记录数的大小(原理也比较简单:每遇到一个新的位数就把之前的x乘以10,再加上这个位数上的数)最后return即可。。。

      (2)快输(有点不吉利。。。)

        同理,关于putchar等输出方法的快慢大家应该已经了解了吧。。。

        还是先上代码:

    1 inline void write(int x)
    2 {
    3     if (x < 0) putchar('-'), x = -x;
    4     if (x > 9) write(x / 10);
    5     putchar(x % 10 + '0');
    6 }
    7 write(a);

    这个应该比较好理解吧,简单的递归。。。

    总结一下,时间复杂度的核心还是算法本身,这些毕竟只是锦上添花,最重要的还是设计出优秀的算法!

  • 相关阅读:
    ps
    Elasticsearch Java Rest Client API 整理总结 (一)
    "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported"
    hdu1421 搬寝室(dp)
    A题之变态青蛙跳
    11.Laravel5学习笔记:扩展 Validator 类
    HDU 5607 graph(矩阵优化+概率DP)
    《Spring技术内幕》笔记-Spring的设计理念和总体架构
    hihocoder 1124 : 好矩阵 dp
    关于ValueAnimation以及Interpolator +Drawable实现的自己定义动画效果
  • 原文地址:https://www.cnblogs.com/yufenglin/p/10316400.html
Copyright © 2011-2022 走看看