Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33922 LYLAKIOI 【S】T2 C++ 通过 100 11 MS 3028 KB 1711 2024-10-30 15:24:45

Tests(10/10):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int maxn=1e5+10; int n,k,fa[maxn];vector<pi>opt; int tag,tk; int fd(int x){ if(x==fa[x])return x; return fa[x]=fd(fa[x]); } void chk(){ up(i,0,n-1)fa[i]=i; assert(opt.size()==(n-1)/2); k=tk; for(auto it:opt){ assert(fd(it.p1)!=fd(it.p2)); fa[fd(it.p1)]=fd(it.p2); assert(fd((it.p1+k)%n)!=fd((it.p2+k)%n)); fa[fd((it.p1+k)%n)]=fd((it.p2+k)%n); } printf("%d\n",(n-1)/2); for(auto it:opt)printf("%d %d\n",it.p1,it.p2); } void slv(){ n=read(),k=tk=read(); if(!(n&1)){printf("-1");return;} if(k>n/2)k=n-k,tag=1; int x=0; up(i,0,n-1)fa[i]=i; for(x=0;x+2*k<n;x+=2*k){ up(i,x+1,x+k)opt.p_b(m_p(0,i)),fa[i]=fa[i+k]=0; } for(x++;x<n;x++){ int pos=(x+1-k+n)%n; if(fd(x)==fd(pos))continue; if(fd(x)==fd((x+k)%n)&&fd(pos)==fd((pos+k)%n))continue; if(fd(pos)==fd((x+k)%n)&&fd(x)==fd((pos+k)%n))continue; opt.p_b(m_p(pos,x)); fa[fd(x)]=fa[fd(pos)]; fa[fd((x+k)%n)]=fa[fd((pos+k)%n)]; } if(tag)for(auto &it:opt)it.p1=(it.p1+k)%n,it.p2=(it.p2+k)%n; chk(); } int main(){ slv(); fclose(stdin); fclose(stdout); return 0; }


测评信息: