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