WA 35pts求调

P1563 [NOIP2016 提高组] 玩具谜题

你样例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


|