这道题我一开始是这样打的代码:
#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呢?本人想了一会儿,想不出来,在此求助万能的谷民。