在没有Maps帮助的情况下通过Memoization解决问题,由于读取文件的方法,我得到了TLE,根据我的说法,这不应该是这种情况。可能的原因是什么?
这是给出 AC - http://ideone.com/OX1XlD 的代码
在上面的代码中,对于扫描n,如果将while(scanf("%lld",&n)!=EOF)
替换为
scanf("%lld",&n)
while(n!=EOF){ do something
scanf("%lld",&n);
}
同样给出了 TLE。我不明白为什么。
最佳答案
我没有检查链接中的代码,但从问题中的代码来看,如果 while(scanf("%lld",&n)!=EOF)
,你是检查 scanf()
本身的返回值。
OTOH,说
scanf("%lld",&n)
while(n!=EOF){
您正在检查 n
的值,这是一个完全不同的情况,如果 scanf()
失败,则为 undefined behaviour ,如果 n
没有提前初始化。
正确且首选的方法感谢风向标先生将检查scanf()
中的项目数量,例如
if (1 != scanf("%lld",&n))
或者,
while ( 1 == scanf("%lld",&n)) //as in this case
EOF
是一种特殊情况,通常很少见。
关于硬币-文件读取方法中的SPOJ TLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545718/