你样例2没过!
对了,你判断边界也有误
```
if(ti>n)
ti=ti%n;
```
这样才是最优解法
by FIRESTARS @ 2023-10-03 19:31:28
再说ti+=(y-1)是错误代码,直接写ti+=y
by FIRESTARS @ 2023-10-03 19:34:41
这两点改了就50了
by FIRESTARS @ 2023-10-03 19:36:30
还有,有些地方必须用else,不然会有问题。
帮你改后的代码:
```
#include<bits/stdc++.h>
using namespace std;
int n,m,ti=1;
string name[1000001];
bool fx[1000001];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>fx[i]>>name[i];
}
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
if(x==0){
//面朝内部:左手顺时针,右手逆时针 0圈内
if(fx[ti]){
ti+=y;
}
else
{
ti-=y;
}
}
else{
if(!fx[ti]){
ti+=y;
}
else
{
ti-=y;
}
}
if(ti<1)ti=n-abs(ti);
if(ti>n)ti=ti%n;
}
cout<<name[ti];
return 0;
}
```
求关
by FIRESTARS @ 2023-10-03 19:52:37
@[wang_jiarui](/user/1073342)
保证能过
by FIRESTARS @ 2023-10-03 19:55:23
还有,这是我用了结构体的代码:
```
#include<bits/stdc++.h>
using namespace std;
struct toy{
string name;
bool dr;
}a[100001];
int main()
{
int n,m,f=1,k;bool ti;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i].dr>>a[i].name;
for(int i=1;i<=m;i++)
{
cin>>ti>>k;
if(!ti){
if(a[f].dr)f+=k;
else f-=k;
}
else
{
if(!a[f].dr)f+=k;
else f-=k;
}
if(f<1)f=n-abs(f);
if(f>n)f=f%n;
}
cout<<a[f].name;
return 0;
}
```
第一次帮助别人,用了半个小时呢
by FIRESTARS @ 2023-10-03 19:56:32