提交时间:2026-04-22 18:47:12

运行 ID: 41403

#include<bits/stdc++.h> using namespace std; int n,k; const int N = 1e5+5; bool bid[N]; int l[N],r[N],cnt,fa[N]; int fnd(int x){return fa[x]==x?x:fa[x]=fnd(fa[x]);} bool mge(int x,int y){ if(fnd(x)==fnd(y))return 0; fa[fnd(x)]=fnd(y); return 1; } int main(){ //freopen("tree.in","r",stdin); //freopen("tree.out","w",stdin); scanf("%d%d",&n,&k); if(n%2==0){ printf("-1\n"); return 0; } for(int i = 0;i<n;i++)fa[i]=i; bool flag = 0; for(int i = 0;i<n;i++){ if(fnd(i)==fnd(i-(i%(2*k))))continue; if(i%(2*k)<=k&&i%(2*k)!=0){ cnt++; l[cnt]=i-i%(2*k),r[cnt]=i; if(!mge(l[cnt],r[cnt])){flag = 1;break;} mge((i+k)%n,i-i%(2*k)+k); } } if(flag)printf("-1\n"); else{ printf("%d\n",cnt); for(int i = 1;i<=cnt;i++)printf("%d %d\n",l[i],r[i]); } }