多写了几句看似多余的代码,就让得分从0分上升至100分,这是何奥秘?
查看原帖
多写了几句看似多余的代码,就让得分从0分上升至100分,这是何奥秘?
786834
Herman526楼主2022/12/10 16:54

为了解决“玩具谜题”,我写了两段差之毫厘的代码。

在这段代码中,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);
                //运行完上述语句,m会变为0
		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;//声明变量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;//用变量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的信息?这是因为“差之毫厘,谬以千里”,还是因为代码中有问题?

2022/12/10 16:54
加载中...