| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41403 | 郭澍宇 | 【S】T2 | C++ | 解答错误 | 10 | 18 MS | 1576 KB | 935 | 2026-04-22 18:47:12 |
#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]); } }