考试写的16pts性质A结果RE只有8pts,求问题在哪儿,谢谢
查看原帖
考试写的16pts性质A结果RE只有8pts,求问题在哪儿,谢谢
561313
orange_dusk楼主2024/11/7 21:37
#include<bits/stdc++.h>
using namespace std;
long long n,m,d,q;
long long a1[100005],c[100005];
bool f[25][100005];
long long a[100005],modd[6],ans[100005];
long long lg[100005];
long long b[100005],cnt;
long long id[100005];
int main()
{
	lg[0]=0;
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
		lg[i]=lg[i/2]+1;
	for(long long i=1;i<=n;i++)
		cin>>a1[i];
	for(long long i=1;i<=m;i++)
		cin>>c[i];
	while((1<<d)<n)
		d++;
	n=(1<<d);
	for(long long i=1;i<=d;i++)
		for(long long j=1;j<=1<<(d-i);j++)
		{
			char c;
			cin>>c;
			f[i][j]=(c=='1');
		}
	cin>>q;
	for(long long i=0;i<4;i++)
		cin>>modd[i];
	for(long long i=1;i<=n;i++)
		a[i]=a1[i]^modd[i%4];
	long long nn=n;
	ans[1]=1;
	for(long long i=1;i<=n;i++)
		id[i]=i;
	for(long long i=1;i<=d;i++)
	{
		cnt=0;
		for(long long j=1;j<=nn;j+=2)
		{
			if(f[i][j/2+1])
			{
				if(a[j+1]>=i)
					b[++cnt]=a[j+1],id[cnt]=id[j+1];
				else
					b[++cnt]=a[j],id[cnt]=id[j];
			}
			else
			{
				if(a[j]>=i)
					b[++cnt]=a[j],id[cnt]=id[j];
				else
					b[++cnt]=a[j+1],id[cnt]=id[j+1];
			}
		}
		ans[i+1]=id[1];
		nn=cnt;
		for(long long i=1;i<=nn;i++)
			a[i]=b[i];
	}
	long long sum=0;
	for(long long i=1;i<=m;i++)
		sum=sum^(ans[lg[c[i]]]*i);
	cout<<sum<<endl;
	return 0;
}
/*
4 3 
0 0 0 0
1 2 4
10
1
1
2 1 0 0 
*/

求问题在哪儿,谢谢dl

2024/11/7 21:37
加载中...