RT,代码如下
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline void print(int n){if(n<0){putchar('-');print(-n);return;}if(n>9)print(n/10);putchar(n%10+'0');}
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
int n,m,p,q,fa[1000005],color[1000005];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
signed main(){
cin>>n>>m>>p>>q;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=m;i>=1;i--){
int l=(i*q+p)%n+1,r=(i*p+q)%n+1;
if(r<l)swap(l,r);
for(int j=l;j<=r;){
if(find(j)==j){
color[j]=i;
fa[j]=find(j+1);
}
j=find(j);
}
}
for(int i=1;i<=n;i++)cout<<color[i]<<endl;
return 0;
}//TLE15pts
通过代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline void print(int n){if(n<0){putchar('-');print(-n);return;}if(n>9)print(n/10);putchar(n%10+'0');}
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
int n,m,p,q,fa[1000005],color[1000005];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
signed main(){
cin>>n>>m>>p>>q;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=m;i>=1;i--){
int l=(i*q+p)%n+1,r=(i*p+q)%n+1;
if(r<l)swap(l,r);
for(int j=r;j>=l;){
if(find(j)==j){
color[j]=i;
fa[j]=find(j-1);
}
j=fa[j];
}
}
for(int i=1;i<=n;i++)cout<<color[i]<<endl;
return 0;
}