快读快输

你有没有过O(n)的时间复杂度,但因为常数太大过不了1e7的数据?

很多时候,即使数据规模可以接受程序的时间复杂度,但常数因子太大,导致TLE

简单的例子:cin和scanf,1e3的数据两个方式都是一瞬间做完,那1e5,1e6的数据呢?区别就明显了。

数据达到1e7时,大概率就是一道需要快读的题了。

如果你有足够多的时间你可以造一组数据量达到1e9的数据,分别用cin,scanf,getchar(字符读入),你就会发现三者的区别了,显然,getchar的效率是非常高的,快读的原理,就是运用getchar来依次读入字符,然后转换为数字。

放上code:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }//这里注意要考虑负数的情况
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
inline void write(int n){
    if(n<0){
        putchar('-');
        n=-n;
    } 
    if(n>9)write(n/10);
    putchar(char(n%10+'0'));
}
//快输,原理和快读一样,程序是递归实现的。
int main(){ int n=read(); write(n); }

码字不易,点个赞在走吧QwQ

猜你喜欢

转载自www.cnblogs.com/-YueYang-/p/12611984.html
今日推荐