被逼的没办法了,求助
查看原帖
被逼的没办法了,求助
138349
银翼的魔术师楼主2020/11/13 20:54

洛谷上数据点全过,牛客网上n10n\le 10的数据点全错,其他测试点全过,洛谷讨论区hack数据全过。求hack,感激不尽。 牛客网测试结果

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],b[N],g[N],h[N];
int main()
{
	int t,n,k,x,y,c,d,e,f,w;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		if(i==1)
		{
			scanf("%d",&n);
			for(int j=1;j<=n;j++)
				scanf("%d",&a[j]);
		}
		else
		{
			scanf("%d",&k);
			for(int j=1;j<=k;j++)
			{
				scanf("%d%d",&x,&y);
				a[x]=y;
			}
		}
		for(int i=1;i<=n;i++)
			g[i]=a[i];
		w=f=0,e=c=1,d=n;
		for(int i=1;i<=n;i++)
			h[i]=i;
		while(1)
		{
			if(c>d)
			{
				c=1,d=0;
				for(int i=e;i<=f;i++)
					h[++d]=b[i];
				e=1,f=0;
			}
			if(f>=e&&(g[b[e]]>g[h[d]]||(g[b[e]]==g[h[d]]&&b[e]>h[d])))
				if(f>=e&&(g[b[f]]<g[h[c]]||(g[b[f]]==g[h[c]]&&b[f]<h[c])))
				{
					g[b[e]]=g[b[e]]-g[b[f]];
					b[f]=b[e++];
				}
				else
				{
					g[b[e]]=g[b[e]]-g[h[c++]];
					b[++f]=b[e++];
				}
			else
				if(f>=e&&(g[b[f]]<g[h[c]]||(g[b[f]]==g[h[c]]&&b[f]<h[c])))
				{
					g[h[d]]=g[h[d]]-g[b[f]];
					b[f]=h[d--];
				}
				else
				{
					g[h[d]]=g[h[d]]-g[h[c++]];
					b[++f]=h[d--];
				}
			if(!w&&(c>d||(f>=e&&(g[b[f]]<g[h[c]]||(b[f]<h[c]&&g[b[f]]==g[h[c]])))))
				w=f-e+d-c+2;
			if(w)
				if(d<c||(f>e&&(g[b[f-1]]<g[h[c]]||(g[b[f-1]]==g[h[c]]&&b[f-1]<h[c]))))
				{
					if(g[b[f]]==g[b[f-1]]&&b[f]>b[f-1])
					{
						if((w-f+e-d+c)&1)
							printf("%d\n",w+1);
						else
							printf("%d\n",w);
						break;
					}
				}
				else
				{
					if(g[b[f]]==g[h[c]]&&b[f]>h[c])
					{
						if((w-f+e-d+c)&1)
							printf("%d\n",w+1);
						else
							printf("%d\n",w);
						break;
					}
				}
			if(!(f-e+d-c))
			{
				if(w&1)
					printf("%d\n",w);
				else
					printf("%d\n",w+1);
				break;
			}
		}
	}
}
2020/11/13 20:54
加载中...