【发布时间】:2015-07-29 15:05:59
【问题描述】:
我无法理解这个函数如何在 c++ 中导致更快的 i/o。 请帮帮我!
#include <iostream>
#include <cstring>
#define FOR(A,B,C) for(int A=B;A<C;A++)
#define EFOR(A,B,C) for(int A=B;A<=C;A++)
#define RFOR(A,B,C) for(int A=B;A>=C;A--)
using namespace std;
inline void Input(int &N)
{
int ch;
N=0;
while((ch<'0'||ch>'9')&&ch!='-'&&ch!=EOF)
ch=getchar();
do
N=(N<<3)+(N<<1)+(ch-'0');
while( (ch=getchar())>='0' && ch<='9');
return;
}
int main()
{
unsigned int fn[100005],gn[100005];
fn[0]=1,gn[0]=1,fn[1]=1,gn[1]=0;
int MOD=100000;
EFOR(fill,2,100001){
fn[fill]=(fn[fill-1]+fn[fill-2]+2*gn[fill-1])%MOD;
gn[fill]=(fn[fill-2]+gn[fill-1])%MOD;
}
int T;
Input(T);
while(T--){
int N;
Input(N);
printf("%u\n",fn[N]%10000);
}
return 0;
}
没有该内联函数的这段代码正在获得 TLE,但有了它,它正在获得 AC 如果我只使用 cin 或 scanf 来获取输入,我会得到一个 TLE
【问题讨论】:
-
比什么更快?
-
您的代码有未定义的行为。
ch永远不会在其初始比较之前在该 while 条件中建立一个值。 -
什么是 TLE 和 AC? (我想我知道,但我不应该问)。你用这个软件玩什么游戏?一些在线编程挑战网站?
-
这段代码混合了糟糕的编程风格和毫无意义的优化尝试。它不是“快速 i/o”。