为了解决“玩具谜题”,我写了两段差之毫厘的代码。
在这段代码中,m会变为0,从而只输入a,s一次,从而让程序早早完成它的任务:
#include<cstdio>
struct r{bool t;char c[11];}l[100001];
int main(){
int n,m;
scanf("%d%d\n",&n,&m);
for(int i=0;i<n;i++)scanf("%d%s",&l[i].t,l[i].c);
bool a;int s,p=0;
while(m--){
scanf("%d%d",&a,&s);
p=(p+s*(l[p].t^a?1:-1)+n)%n;
}
puts(l[p].c);
}
经过多次调试,自我发现将'while(m--)'换成'for(int i=0;i<m;i++)'等,都无法解决该问题,从而导致测试点全WA了。
而加上两句变量声明、赋值语句,情局大逆转了:
#include<cstdio>
struct r{bool t;char c[11];}l[100001];
int main(){
int n,m,k;
scanf("%d%d\n",&n,&m);
for(int i=0;i<n;i++)scanf("%d%s",&l[i].t,l[i].c);
bool a;int s,p=0;
k=m;
while(k--){
scanf("%d%d",&a,&s);
p=(p+s*(l[p].t^a?1:-1)+n)%n;
}
puts(l[p].c);
}
仅仅相差了9B的空间,电脑就懂得耐心接受全部数据了,这题就AC了。我的电脑,你终于不再偷懒啦!
而在茅塞顿开的同时,我又有些疑惑不解:就9个字符,远远不足1KB空间,又看似多余,就能让电脑多接收可达100KB的信息?这是因为“差之毫厘,谬以千里”,还是因为代码中有问题?