根据题意模拟即可,一开始猜想着会超时。(然而并没有超时)。
大概数据随机性比较强,水了一点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define LL long long
#define M 100009
using namespace std;
LL a[2*M],t[2*M],q[4*M],A,B,n,m;
int l=1,r,p;
int vis[2*M];
int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&A,&B);
scanf("%lld%lld",&a[1],&a[2]);
vis[a[1]]=vis[a[2]]=1;
q[++r]=a[1];q[++r]=a[2];
while(r-l+1>n/2) vis[q[l]]=0,l++;
for(int i=1;i<=m-2;i++)
{
p=0;t[0]=(A*a[i+1]+B*a[i])%n;
while(1)
{
if(!vis[t[p]])
{
q[++r]=t[p];
vis[t[p]]=1;
if(r-l+1>n/2) vis[q[l]]=0,l++;
a[i+2]=t[p];
break;
}
t[++p]=(t[p-1]+1)%n;
}
}
for(int i=3;i<=m;i++) printf("%lld ",a[i]);
return 0;
}