萌新求助!!!

P1563 [NOIP2016 提高组] 玩具谜题

其实这一道题不是很需要记录那么多的状态,不需要那么多的判断,你可以看看能不能看懂我的思路: ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 5; string names[MAXN]; int faces[MAXN];//1 为朝向圈外 0 为朝向圈内 int n, m, mod, type, order, now = 0; //指令 0 是向左数,1 是向右数 int MOD(int n){ return (n % mod + mod) % mod; } int main(){ cin >> n >> m; mod = n; for(int i = 0; i <= n - 1; i ++){ cin >> faces[i] >> names[i]; if(faces[i] == 0) faces[i] = -1; } for(int i = 1; i <= m; i ++){ cin >> type >> order; if(type == 1) type = -1; else type = 1; now = MOD(now + type * faces[now] * order); } cout << names[now] << endl; return 0; } ``` 这个感觉就是有一点相反数,用负数表示反方向,那么负负得正。
by NPH_Zhao @ 2023-08-22 11:14:15


@[Lv_666](/user/920270)
by NPH_Zhao @ 2023-08-22 11:14:54


@[NPH_Zhao](/user/1059321) 谢谢了
by Lv_666 @ 2023-08-22 14:03:28


``` #include<bits/stdc++.h> using namespace std; const int N=1e5+10; struct to { int t; string na; } a[N]; struct in { int d; int l; } b[N]; int m,n,k=1; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i].t>>a[i].na; for(int i=1;i<=m;i++)cin>>b[i].d>>b[i].l; for(int i=1;i<=m;i++){ if(a[k].t==1){ if(b[i].d==1)k-=b[i].l; else k+=b[i].l; }else{ if(b[i].d==1)k+=b[i].l; else k-=b[i].l; } if(k>n)k-=n; if(k<1)k+=n; } cout<<a[k].na<<endl; return 0; } ```
by unhappysheep @ 2023-08-22 14:51:01


|