Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33957 LYLAKIOIAKIOI 【S】T2 C++ 解答错误 90 11 MS 356 KB 2469 2024-10-30 19:10:47

Tests(9/10):


#include<bits/stdc++.h> #define int long long #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]; signed 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);//g=n/g; for(int i=0;i<(n/g)-1;i++){ for(int j=0;j<g-1;j++){ //cout<<(i*k+j)%n<<endl; if(v[(i*k+j)%n]) continue; v[(i*k+j)%n]=1;v[(i*k+j+k)%n]=1; cout<<(i*k+j)%n<<' '<<(i*k+j+1+k)%n<<'\n'; } }for(int i=1;i<(n/g);i+=2){ cout<<(i*k)%n<<' '<<(i*k+1)%n<<'\n'; }for(int i=0;i<(n/g)-1;i+=2){ cout<<(i*k+g-2)%n<<' '<<(i*k+g-1)<<'\n'; } }else{ int t1=0,t2=k; cout<<n/2<<endl; for(int i=1;i<n;i+=2){ cout<<t1<<' '<<t2<<'\n'; 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; }


测评信息: