之前的 数据生成器 沉了,我只是捞一下。
提示:
op 输入的时候如果用scanf的话弄成字符串,为啥错不知道,cin错不错不知道。
调试之后千千万万别忘了关 freopen!多Unaccepted 一次555
Code(数据生成器):
#include<bits/stdc++.h>
using namespace std;
#define reg register
inline int random(int x) { return (rand()%x)*(rand()%x)%x; }
#define maxn 25
int n,fa[1001],cnt=0;
inline int szfind(int x) { return fa[x]==x?x:fa[x]=szfind(fa[x]); }
map<int,string> mp;
int main(){
srand(time(0));
freopen("data.in","w",stdout);
mp[1]="Q",mp[2]="C";
int n=10,m=5;
printf("%d %d\n",n,m);
for(reg int i=1;i<=n;++i) fa[i]=i;
for(reg int i=1;i<=n;++i) {
int x=random(n+10);
while(!x) x=random(n+10);
cout<<x<<" ";
}
cout<<endl;
for(reg int i=1;i<n;++i){
int x=random(n+1),y=random(n+1);
while(1) { if(szfind(x)!=szfind(y)&&x&&y) break;x=random(n+1),y=random(n+1); }
printf("%d %d\n",x,y);
fa[szfind(x)]=szfind(y);
}
for(reg int i=1;i<=m;++i){
int chk=(random(maxn)&1)+1;
cout<<mp[chk]<<" ";
int x=random(n+1),y=random(n+1),z=random(n+1);
if(chk==1){
while(1) { if(x&&y) break;x=random(n+1),y=random(n+1); }
cout<<x<<" "<<y<<endl;
}
if(chk==2){
while(1) { if(x&&y&&z) break;x=random(n+1),y=random(n+1),z=random(n+1); }
cout<<x<<" "<<y<<" "<<z<<endl;
}
}
}