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);

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

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

  • 相关阅读:
    创建Variant数组
    ASP与存储过程(Stored Procedures)
    FileSystemObject对象成员概要
    Kotlin 朱涛9 委托 代理 懒加载 Delegate
    Kotlin 朱涛 思维4 空安全思维 平台类型 非空断言
    Kotlin 朱涛7 高阶函数 函数类型 Lambda SAM
    Kotlin 朱涛16 协程 生命周期 Job 结构化并发
    Proxy 代理模式 动态代理 cglib MD
    RxJava 设计理念 观察者模式 Observable lambdas MD
    动态图片 Movie androidgifdrawable GifView
  • 原文地址:https://www.cnblogs.com/yufenglin/p/10316400.html
Copyright © 2011-2022 走看看