#include <bits/stdc++.h> typedef long long ll; using namespace std; const int maxn=1e6+10; int f[maxn],col[maxn]; int find(int x){ return f[x]==x?x:f[x]=find(f[x]); } int main() { int n,m,a,b; cin>>n>>m>>a>>b; for(int i=1;i<=n+1;i++)f[i]=i; for(ll i=m,l,r;i;i--){ l=(a*i+b)%n+1; r=(b*i+a)%n+1; if(l>r)swap(l,r); while(l<=r){ if(f[l]==l){ col[l]=i; f[l]=find(l+1); l=f[l]; } else{ l=find(l); } } } for(int i=1;i<=n;i++) cout<<col[i]<<"\n"; return 0; }
原文:https://www.cnblogs.com/qq1415584788/p/14728473.html