记录编号 265319 评测结果 AAAAAAAAAA
题目名称 [NOI 2014]随机数生成器 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 20.797 s
提交时间 2016-06-02 14:19:39 内存使用 191.06 MiB
显示代码纯文本
#include<cstdio>
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
long long last;int a,b,c,d;
int rand(){
	return last=((a*last%d+b)*last+c)%d;
}
int n,m,q,i,j;
const int NM=25000010;
int p[NM],o[NM];
int ma[5010],mi[5010];
int main()
{
	freopen("random_2014.in","r",stdin);
	freopen("random_2014.out","w",stdout);
	scanf("%d%d%d%d%d",&last,&a,&b,&c,&d);
	scanf("%d%d%d",&n,&m,&q);
	for (i=1;i<=n*m;i++) o[i]=i;
	int e,Z,u,v;
	for (i=1;i<=n*m;i++){
		rand();e=last%i+1;
		Z=o[i];o[i]=o[e];o[e]=Z;
	}
	for (i=1;i<=q;i++){
		scanf("%d%d",&u,&v);
		Z=o[u];o[u]=o[v];o[v]=Z;
	}
	for (i=1;i<=n*m;i++) p[o[i]]=i;
	
	for (i=1;i<=n;i++) ma[i]=m,mi[i]=1;
	int cnt=0;
	for (i=1;i<=n*m;i++){
		short x=(p[i]-1)/m+1,y=p[i]-(x-1)*m;
		if (mi[x]<=y&&y<=ma[x]){
			printf("%d ",i);
			cnt++;if (cnt==n+m-1) break;
			for (j=1;j<x;j++) ma[j]=min(ma[j],y);
			for (j=x+1;j<=n;j++) mi[j]=max(mi[j],y);
		}
	}
	printf("\n");
	return 0;
}