Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33949 | 方巾予 | 【S】T2 | C++ | 通过 | 100 | 10 MS | 256 KB | 1029 | 2024-10-30 16:23:16 |
#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; int lst; //cout<<len<<' '<<tot<<endl; for(int i=0;i<=len-2;i++){ for(int j=2,x=i,y=nxt(i+1);j<tot;j+=2,x=nxt(nxt(x)),y=nxt(nxt(y))){ printf("%d %d\n",x,y); } } for(int i=1,x=nxt(0),y=nxt(1);i<tot;x=nxt(nxt(x)),y=nxt(nxt(y)),i+=2){ printf("%d %d\n",x,y); } for(int i=1;i<len;i+=2){ printf("%d %d\n",i,i+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; }