【bzoj3671】[Noi2014]随机数生成器
2024-08-26 07:32:15
优先按照它说明的方法处理数组
然后为了让数列中尽可能多的出现小的数字
所以1是必须要出现的,这样才能使整个数列的排序后字典序最小。
我们思考,如果2也能在这个数列中那就最好不过了
但是2有可能不在这个数列里,就是2在走了1就不可能走的地方的话,就不能走2了。
所以从小到大枚举数字,如果当前数字能走,就输出,然后标记所有走了这个节点就不能走的节点。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; typedef long long LL; #define N 5010 LL seed,a,b,c,d; int n,m,ask;
int x,y; int arr[N*N],g[N][N];
int ans[N<<2]; bool v[N][N]; int work()
{
return seed=(a*seed*seed%d+b*seed%d+c)%d;
} int main()
{
scanf("%lld%lld%lld%lld%lld%d%d%d",&seed,&a,&b,&c,&d,&m,&n,&ask);
for (int i=1;i<=n*m;i++)
arr[i]=i,swap(arr[i],arr[work()%i+1]);
for (int i=1;i<=ask;i++)
{
scanf("%d%d",&x,&y);
swap(arr[x],arr[y]);
}
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
g[i][j]=arr[(i-1)*n+j];
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
arr[g[i][j]]=(i-1)*n+j;
for (int i=1;i<=n*m;i++)
{
x=arr[i]/n+1-(arr[i]%n==0);
y=arr[i]-(x-1)*n;
if (!v[x][y])
{
if (i!=1)
putchar(' ');
printf("%d",i);
for (int j=x+1;j<=m;j++)
for (int k=y-1;k;k--)
{
if (v[j][k])
break;
v[j][k]=true;
}
for (int j=x-1;j;j--)
for (int k=y+1;k<=n;k++)
{
if (v[j][k])
break;
v[j][k]=true;
}
}
}
return 0;
}
最新文章
- C# 设计模式之工厂模式(一)
- combobox获取值
- 对于C++窗口编译一闪而过的解决方法 (DEV CPP下)
- 错误3 error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm120”
- android实现系统电话通话过程中自动感应黑屏
- exceptions-in-java
- POJ 2070
- Angular js总结
- Navicat Premium 自动备份mysql和sqlserver
- LPC1768IAP(详解,有上位机)
- 我的第一个jQuery插件--表格隔行变色
- The Go Programming Language. Notes.
- Ajax简单总结
- 第二篇:操纵MySQL数据库(2) - 基于ORM思想的SQLAlchemy库
- 服务器配置java
- BZOJ5254 : [Fjwc2018]红绿灯
- Layer For Mobile 弹窗 input输入文字后,点击取消确定按钮失效(需点击两次)
- C++中cin.clear()的用法
- Linux 命令之mv
- eventql部署过程
热门文章
- hdu2046
- BZOJ 4811 [Ynoi2017]由乃的OJ ——Link-Cut Tree
- VS链接错误: LNIK1123
- VB6 post图片
- linux和windows下分别如何查看电脑是32位的还是64位?
- CentOS7关于网络的设置
- wamp Apache和mysql服务无法启动的终极解决方法!!!!!!
- Error处理: “非法字符: \65279”的解决办法
- Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
- android 禁止ViewPager滑动