造福后人
查看原帖
造福后人
134510
WrongAnswer_90Alive楼主2023/10/25 10:55

食用方法:gen 的输出为 1.in

程序输出为 1.out

若输出正确 checker 输出 fine

若操作不合法 checker 输出 ERR1/2

若最后栈不为空 checker 输出 ERR3

求关注

gen:

int T=1000,n=10,k,m,a[10001],b[100001];
	void mian()
	{
		write(T,'\n');
		while(T--)
		{
			write(n),k=2*n-1,m=4*k,write(m),write(k,'\n');
			for(int i=1;i<=k;++i)a[i]=4;
			int tmp=rand()%10;
			while(tmp--)
			{
				int x=rand()%k+1,y=rand()%k+1;
				if(a[x]>2)a[y]+=2,a[x]-=2;
			}
			for(int i=1,j=1,k=1;i<=m;++i)
			{
				b[i]=j;
				if(k++==a[j])++j,k=1;
			}
			random_shuffle(b+1,b+1+m);
			for(int i=1;i<=m;++i)write(b[i]);
			puts("");
		}
	}

datachecker:

int T,n,m,k,b[10001];
	void mian()
	{
		read(T);
		while(T--)
		{
			read(n,m,k),memset(b,0,sizeof(b));int x;
			for(int i=1;i<=m;++i)read(x),++b[x];
			for(int i=1;i<=k;++i)if(b[i]&1)assert(0);
		}
	}

checker:

int T,n,m,k,q,a[2000001];
deque<int> st[601];
int main()
{
	ifstream in("1.in");
	ifstream out("1.out");
	in>>T;int opt,x,y;
	for(int t=1;t<=T;++t)
	{
		in>>n>>m>>k;
		for(int i=1;i<=m;++i)in>>a[i];
		out>>q;
		for(int i=1,j=1;i<=q;++i)
		{
			out>>opt;
			if(opt==1)
			{
				out>>x;
				if(!st[x].empty()&&st[x].back()==a[j])st[x].pop_back();
				else st[x].push_back(a[j]);
				++j;
			}
			else if(opt==2)
			{
				out>>x>>y;
				if(!st[x].empty()&&!st[y].empty()&&st[x].front()==st[y].front())
				st[x].pop_front(),st[y].pop_front();
				else cerr<<"ERR1 on task "<<t<<" operation "<<i<<endl,assert(0);
			}
			else cerr<<"ERR2 on task "<<t<<" operation "<<i<<endl,assert(0);
		}
		for(int i=1;i<=n;++i)if(!st[i].empty())cerr<<"ERR3",assert(0);
	}
	cerr<<"Fine"<<endl;
}

loop:

#include<windows.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int main()
{
	freopen("NOTHING.out","w",stdout);
	while(1)
	{
		system("gen.exe");
		system("datachecker.exe");
		system("1.exe");
		system("checker.exe");
	}
	return 0;
}
2023/10/25 10:55
加载中...