大佬们,看一下为什么RE
查看原帖
大佬们,看一下为什么RE
477676
crosaa楼主2021/11/15 22:36
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){ if(ch=='-') f=-1;ch=getchar(); }
	while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48);ch=getchar(); }
	return x*f;
}
const int Maxn=2e5+5;
struct point{
	int a,pos;
	bool out;
}dor[Maxn],p[Maxn];
vector<int> v[Maxn];
int n,m,L,s,ans;
int sum[Maxn];
int main()
{
	n=read(); m=read(); L=read();
	dor[1].pos=0;
	for(int i=2;i<=m;i++) dor[i].pos=read();
	for(int i=1;i<=m;i++)
	{
		dor[i].a=read();
		sum[dor[i].pos]=dor[i].a;
		s+=dor[i].a;
	}
	for(int i=1;i<=n;i++)
	{
		p[i].a=read(); p[i].pos=read();
	}
	while(s>0)
	{
		for(int i=0;i<Maxn;i++) v[i].clear();
		for(int i=1;i<=n;i++)
		{
			if(p[i].out==1) continue;
			if(p[i].a==0) p[i].pos=(p[i].pos+1)%L;
			else p[i].pos=(p[i].pos-1+L)%L;
			if(sum[p[i].pos])
			{
				v[p[i].pos].push_back(i);
			}
		}
		for(int i=1;i<=m;i++)
		{
			int t=v[dor[i].pos].size();
			if(t<=sum[dor[i].pos])
			{
				s-=t;
				sum[dor[i].pos]-=t;
				for(int j=0;j<t;j++)
				{
					int tmp=v[dor[i].pos][j];
					p[tmp].out=1;
//					printf("1:tmp=%d i=%d\n",tmp,i);
					ans^=tmp*i;
				}
			}
			else
			{
				s-=sum[dor[i].pos];
			
				sort(v[dor[i].pos].begin(),v[dor[i].pos].end());
				for(int j=0;j<sum[dor[i].pos];j++)
				{
					int tmp=v[dor[i].pos][j];
					p[tmp].out=1;
//					printf("2:tmp=%d i=%d\n",tmp,i);
					ans^=tmp*i;
				}
				sum[dor[i].pos]=0;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(p[i].out==0)
		{
			ans^=i;
		}
	}
	printf("%d",ans);


	return 0;
}

2021/11/15 22:36
加载中...