本文共 1704 字,大约阅读时间需要 5 分钟。
题意:给你三种操作,然后询问当前第i个数的值
1、先奇后偶
2、对称交换
3、对每个数平方
题解:可以对询问的第i个位置逆推,求平方即可;
#include#include #include #include using namespace std;typedef __int64 LL;const LL MOD = 1000000007;char a[100005][1];int b[100005];LL Pow(LL A,LL B){ LL res = 1; while(B){ if(B&1) res = res * A % MOD; A = A * A % MOD ; B /= 2; } return res;}int main(){ int t,n,m; cin >> t; while(t--){ cin >> n >> m; int x = (n+1)/2; for(int i = 1;i <= m;i++){ scanf("%s %d",a[i],&b[i]); if(a[i][0] == 'Q') { LL p = 1; int pos = b[i]; for(int j = i-1;j >= 1;j--){ if(a[j][0] == 'O'){ if(b[j] == 1){// cout << " wqew " << endl; if(pos <= x) pos = pos + (pos - 1); else pos = (pos - x) * 2; } else if(b[j] == 2){// cout << " wqew " << endl; if(n%2){ pos = 2 * x - pos; } else{ pos = 2 * x - pos + 1; } } else{ p = p * 2 % (MOD - 1); } } }// cout << pos << "====" << p << endl; LL x = pos; x = Pow(x,p); cout << x << endl; } } }}
转载地址:http://fdsgi.baihongyu.com/