Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33942 | 方巾予 | 【S】T2 | C++ | 解答错误 | 40 | 13 MS | 256 KB | 916 | 2024-10-30 15:59:47 |
#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e5+10; int n,k,len; int nxt(int x){ return (x+k)%n; } int gcd(int x,int y){ if(y==0) return x; return gcd(y,x%y); } void solve1(){ int x=0; for(int i=1;i<=n/2;i++){ printf("%d %d\n",x,(x+k)%n); x=(x+2*k)%n; } } void solve2(){ int tot=n/len; //cout<<len<<' '<<tot<<endl; for(int i=0;i<=tot-2;i++){ for(int j=i;j+k+1<n;j+=2*k){ printf("%d %d\n",j,j+k+1); } } for(int i=len-1,j=1;j<tot;i=nxt(i),j+=2){ printf("%d %d\n",i,i-1); } printf("%d %d\n",n-k,n-k+1); } signed main(){ scanf("%d%d",&n,&k); if(!(n&1)){ printf("-1"); return 0; } printf("%d\n",n>>1); len=gcd(n,k); if(len==1){ solve1(); }else{ solve2(); } return 0; }