食用方法: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;
}