在没有地图帮助的情况下通过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。我无法弄清楚原因。
答案 0 :(得分:1)
我没有在链接中检查您的代码,但是根据问题中的代码,如果是while(scanf("%lld",&n)!=EOF)
,则您需要检查scanf()
本身的返回值。
OTOH,说
scanf("%lld",&n)
while(n!=EOF){
您正在检查n
的值,这是完全不同的情况,如果scanf()
失败,则为undefined behaviour,如果n
是早先没有初始化。
正确和首选的方法感谢Weather Vane先生将检查scanf()
中的项目数,例如
if (1 != scanf("%lld",&n))
或,
while ( 1 == scanf("%lld",&n)) //as in this case
EOF
是一个极端情况,通常很少见。
答案 1 :(得分:0)
在回应OP最近的评论时,我建议他尝试这个。
#include <stdio.h>
int main(void) {
long long int n;
char instr[20];
while (1 == scanf("%lld", &n)) {
printf ("The entry was %lld\n", n);
}
printf("End of file\n");
return 0;
}
SPOJ将通过从文件中输入输入来测试您的代码。我们说inp.txt
有
1
2
3
4
然后使用类似的东西(在Windows控制台的情况下)运行代码
coins <inp.txt
这给了我输出
The entry was 1
The entry was 2
The entry was 3
The entry was 4
End of file
如果这样做,并且您的程序仍然超出时间限制,您必须查看您的解决方案算法,因为SPOJ没有提供关于为什么您有TLE的线索。
当然,您提交的解决方案不得打印这些提示,因为输出将无法通过测试。