Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33953 LYLAKIOIAKIOI 【S】T2 C++ 解答错误 40 1229 MS 336 KB 2591 2024-10-30 16:51:39

Tests(4/10):


#include<bits/stdc++.h> #define pii pair<int,int> #define mk make_pair #define fi first #define se second #define vecpi vector<pii> using namespace std; int n,k; const int N=1e5+10; struct dsu{ int fa[N]; int fd(int x){ if(x==fa[x]) return x; return fa[x]=fd(fa[x]); }void mg(int x,int y){ x=fd(x),y=fd(y); fa[x]=y; }void init(int x){ for(int i=1;i<=x;i++) fa[i]=i; } }d; bool chk(vecpi E){ d.init(n); for(auto ed:E){ if(d.fd(ed.fi)==d.fd(ed.se)){ return 0; }else{ d.mg(ed.fi,ed.se); } }for(int i=1;i<=n;i++){ if(d.fd(i)!=d.fd(1)) return 0; }return 1; }int a[N]; int gcd(int a,int b){ if(min(a,b)==0) return max(a,b); return gcd(min(a,b),max(a,b)%min(a,b)); }bool v[N]; int main(){ cin>>n>>k; if(n%2==0){ cout<<-1<<endl; }else{ if(n>10){ if(gcd(n,k)!=1){ cout<<n/2<<endl; int g=gcd(n,k); for(int i=0;i<g;i++){ if(i%2==0){ int t1=i,t2=k+i; for(int j=1;j<=(n/g)/2;j++){ cout<<t1<<' '<<t2<<endl; t1=(t1+k+k)%n,t2=(t2+k+k)%n; } }else{ int t1=i,t2=k+i; for(int j=1;j<=(n/g)/2;j++){ while(v[t1]) t1+=g; cout<<t1<<' '<<t1-1<<endl; v[t1]=1,v[(t1+k)%n]=1; }while(v[t1]) t1+=g; cout<<t1<<' '<<t1+1<<endl; } } }else{ int t1=0,t2=k; cout<<n/2<<endl; for(int i=1;i<n;i+=2){ cout<<t1<<' '<<t2<<endl; t1=(t1+k+k)%n,t2=(t2+k+k)%n; } } return 0; } for(int i=1;i<=n;i++) a[i]=i; do{ vecpi E;E.clear(); for(int i=1;i<n;i+=2){ E.push_back(mk(a[i],a[i+1])); E.push_back(mk((a[i]+k-1)%n+1,(a[i+1]+k-1)%n+1)); }if(chk(E)){ cout<<n/2<<endl; for(int i=1;i<n;i+=2){ cout<<a[i]-1<<' '<<a[i+1]-1<<endl; }return 0; } }while(next_permutation(a+1,a+n+1)); cout<<-1<<endl; } return 0; }


测评信息: