写了两种,样例都过了,但提交全WA
//暴力
#include <bits/stdc++.h>
#define int long long
using namespace std;
int px[10000005];
bool col[10000005];
int read(){
int x = 0;
char ch = getchar();
while(ch>='0' && ch<='9')
{
x = x * 10 + (ch - '0');
ch = getchar();
}
return x;
}
void write(int x)
{
if (x>9)
write(x/10);
putchar(x%10+48);
return;
}
signed main()
{
int n,m,p,q;
n=read(),m=read(),p=read(),q=read();
for (int i=m;i>=1;i--)
{
int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
if (l>r)
swap(l,r);
for (int j=l;j<=r;j++)
if (!col[j])
px[j]=i,col[j]=true;
}
for (int i=1;i<=n;i++)
{
write(px[i]),puts("");
}
return 0;
}
//并查集
#include <bits/stdc++.h>
#define int long long
using namespace std;
int px[10000005];
bool col[10000005];
int read(){
int x = 0;
char ch = getchar();
while(ch>='0' && ch<='9')
{
x = x * 10 + (ch - '0');
ch = getchar();
}
return x;
}
void write(int x)
{
if (x>9)
write(x/10);
putchar(x%10+48);
return;
}
int find(int x)
{
if (px[x]!=x)
px[x]=find(px[x]);
return px[x];
}
signed main()
{
int n,m,p,q;
n=read(),m=read(),p=read(),q=read();
for (int i=0;i<=n;i++)
px[i]=i;
for (int i=m;i>=1;i--)
{
int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
if (l>r)
swap(l,r);
for (int j=l;j<=r;j++)
if (!col[j])
px[find(j)]=find(i),col[j]=true;
}
for (int i=1;i<=n;i++)
{
if (!col[i])
write(0),puts("");
else
write(px[i]),puts("");
}
return 0;
}