#include<bits/stdc++.h>
#define N 16
#define INF 0x3f3f3f3f
#define eps 1e-6
#define pi 3.141592653589793
#define mod 1000000007
#define P 998244353
#define LL long long
#define pb push_back
#define fi first
#define se second
#define cl clear
#define si size
#define lb lower_bound
#define ub upper_bound
#define bug(x) cerr<<#x<<" : "<<x<<endl
#define mem(x,y) memset(x,0,sizeof(int)*(y))
#define sc(x) scanf("%d",&x)
#define scc(x,y) scanf("%d%d",&x,&y)
#define sccc(x,y,z) scanf("%d%d%d",&x,&y,&z)
using namespace std;
struct Mat{
bool d[N][N];
Mat (){memset(this,0,sizeof(Mat));}
Mat operator * (Mat &b) const{
Mat c;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++) if (d[i][j])
for(int k=0;k<N;k++)
c.d[i][k]^=b.d[j][k];
return c;
}
};
Mat q[50010];
int _17[N],_19[N];
int main(){
_17[0]=_19[0]=1;
for(int i=1;i<N;i++) _17[i]=_17[i-1]*17,_19[i]=_19[i-1]*19;
Mat x,E; for(int i=0;i<N;i++) E.d[i][i]=1;
int T;
scanf("%d",&T);
while(T--){
int t,n,head=1,tail=0,fg=0; unsigned int seed,ans=0;
x=E;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%u",&t,&seed);
if (t==1){
seed^=ans;
Mat c;
for(int i=0;i<N;i++){
seed^=seed*seed+15;
for(int j=0;j<N;j++)
c.d[i][j]=(seed>>j)&1;
}
q[++tail]=c;
x=c*x;
}else if (head<=tail)head++;
if (head>fg){
fg=tail;
x=E;
for(int i=tail-1;i>=head;i--) q[i]=q[i+1]*q[i];
}
if (head>tail){
puts("0"); ans=0; continue;
}
Mat tmp=x*q[head];
ans=0;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++) if (tmp.d[i][j])
ans+=_17[i]*_19[j];
printf("%u\n",ans);
}
}
}
2019 ICPC上海網絡賽 H Luhhy's Matrix
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.