COINS - 文件读取方法中的 SPOJ TLE
COINS - SPOJ TLE in File reading Method
在没有地图帮助的情况下通过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。我不明白为什么。
我没有检查您在 link 中的代码,但是从问题中的代码来看,在 while(scanf("%lld",&n)!=EOF)
的情况下,您正在检查 return 的值 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
是极端情况,通常很少见。
为了回应 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 的线索。
当然,您提交的解决方案不能打印这些提示,因为输出将无法通过测试。
在没有地图帮助的情况下通过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。我不明白为什么。
我没有检查您在 link 中的代码,但是从问题中的代码来看,在 while(scanf("%lld",&n)!=EOF)
的情况下,您正在检查 return 的值 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
是极端情况,通常很少见。
为了回应 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 的线索。
当然,您提交的解决方案不能打印这些提示,因为输出将无法通过测试。