求助万能的谷民
查看原帖
求助万能的谷民
477258
charleshe楼主2022/3/17 18:10

这道题我一开始是这样打的代码:

#include <iostream>
#include <string>
using namespace std;
struct lm{
	int i;
	bool flag;
	string name;
};
lm player[100001];
int n,m;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>player[i].flag>>player[i].name;
		player[i].i=i;
	}
	int ans=1;
	for(int i=1;i<=m;i++){
		bool flag;
		int sum;
		cin>>flag>>sum;
		if(flag==player[ans].flag) ans=(ans-sum+n)%n;
		else ans=(ans+sum+n)%n;
	}
	cout<<player[ans].name;
	return 0;
}

结果WA了,第四个测试点和第八个测试点。

后来发现有人问过,也有人答过,说要把1改成0,然后改了,再一番提交,AC了。

AC代码:

#include <iostream>
#include <string>
using namespace std;
struct lm{
	int i;
	bool flag;
	string name;
};
lm player[100001];
int n,m;
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){//这里改了
		cin>>player[i].flag>>player[i].name;
		player[i].i=i;
	}
	int ans=0;//这里也改了
	for(int i=1;i<=m;i++){
		bool flag;
		int sum;
		cin>>flag>>sum;
		if(flag==player[ans].flag) ans=(ans-sum+n)%n;
		else ans=(ans+sum+n)%n;
	}
	cout<<player[ans].name;
	return 0;
}

所以为什么一定要用0而不能用1呢?本人想了一会儿,想不出来,在此求助万能的谷民。

2022/3/17 18:10
加载中...