| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41317 | water | 【S】T2 | C++ | 解答错误 | 40 | 1000 MS | 14700 KB | 1255 | 2026-04-15 21:46:57 |
#include<bits/stdc++.h> using namespace std; int n,k; int sz[100005],f[100005],en[100005],d2[100005],jj,oo; int ji[34005],ou[50005]; vector<int> p[100005]; void dfs(int x,int b){ sz[x]=1; f[x]=b; for(int i=0;i<p[x].size();i++){ if(p[x][i]==b){ en[b]=x; break; } else{ dfs(p[x][i],b); sz[x]+=sz[p[x][i]]; } } } struct xxs{ int xx,yy; }; queue<xxs> q; int main(){ cin>>n>>k; if(n%2==0){ cout<<-1; return 0; } for(int i=0;i<n;i++){ f[i]=-1; p[i].push_back((i+k)%n); } for(int i=0;i<n;i++){ if(f[i]==-1){ dfs(0,0); if(sz[i]%2==1){ ji[++jj]=i; q.push({i,p[i][0]}); for(int j=p[p[i][0]][0];p[j][0]!=i;j=p[p[j][0]][0]){ q.push({j,p[j][0]}); } } else{ ou[++oo]=i; for(int j=i,k=3;k<=sz[i];k+=2){ q.push({j,p[j][0]}); j=p[p[j][0]][0]; if(k+2>sz[i]){ d2[i]=j; } } if(sz[i]==2){ d2[i]=i; } } } } //cout<<jj<<' '; if(jj==1){ for(int i=1;i<=oo;i++){ // cout<<d2[ou][i] q.push({d2[ou[i]],en[ji[1]]}); en[ji[1]]=en[ou[i]]; } } cout<<q.size()<<'\n'; while(q.size()){ xxs xxx=q.front(); q.pop(); cout<<xxx.xx<<' '<<xxx.yy<<'\n'; } return 0; }