性质A求调
查看原帖
性质A求调
1401911
ridewind2013楼主2025/8/29 13:19
#include<bits/stdc++.h>
using namespace std;
string d[100010];
int n,m,k,a[100010],b[100010],c[100010],x[4],lg[100010];
int win(int x){
    queue<int>q;
    for(int i=1;i<=x;i++)q.push(i);
    for(int r=1;q.size()>1;r++){
        int t=q.size();
        for(int j=1;j<=t/2;j++){
            int aa=q.front();
            q.pop();
            int bb=q.front();
            q.pop();
            if(d[n-lg[x]+r][j-1]=='0')q.push((b[aa]>=r?aa:bb));
            else q.push((b[bb]>=r?bb:aa));
        }
    }
    return q.front();
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>c[i];
    for(int i=2;i<=n;i*=2)lg[i]=lg[i/2]+1;
	while(1){
		cin>>d[++k];
        if(d[k].size()==1)break;
	}
	int q;
	cin>>q;
	while(q--){
        cin>>x[0]>>x[1]>>x[2]>>x[3];
        for(int i=1;i<=n;i++)b[i]=a[i]^x[i%4];
        int ans=0;
        for(int i=1;i<=m;i++){
            ans^=(i*win(c[i]));
        }
        cout<<ans<<"\n";
    }
	return 0;
}
2025/8/29 13:19
加载中...