玩具谜题(NOIP2016)

时间:2023-03-15 20:44:20

题目链接:玩具谜题

提高组日常水题。

直接模拟,有需要注意的点会在代码后讲解:

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
int dirt[n];
char name[n][20];
for(int i=0;i<n;i++){
char x;
scanf("%d",&dirt[i]);
scanf("%c",&x); //1
scanf("%s",name[i]);
}
int cur=0; //2
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(a+dirt[cur]==1){ //3
cur+=b;
}else{
cur-=b;
}
if(cur<0){ //4
cur+=n;
}else if(cur>=n){
cur-=n;
}
}
printf("%s",name[cur]);
return 0;
}

只提4处:

1处:这是为了把数字与名字之间的空格读入扔掉,为以后输出省了一点事(好像更麻烦了?无所谓,你自己抉择。)

2处:cur代表当前走到哪个小人

3处:自己画个图就明白了为什么这么写。

4处:防止越界。

顺便提一下:如果有的人讨厌用字符串,还可以用rewind()函数,来移动文件流指针,也就是说,读入名字不记录,等计算出第几个人后,回去再读出来是第几个人。