你有没有过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