题目大意:实在是太难说明了,自己看pdf吧。。

思路:优先依照它说明的方法处理数组,然后为了让数列中尽可能多的出现小的数字,所以1是必需要出现的,这样才干使整个数列的排序后字典序最小。

我们思考,假设2也能在这个数列中那就最好只是了,可是2有可能不在这个数列里,就是2在走了1就不可能走的地方的话,就不能走2了。所以从小到大枚举数字,假设当前数字能走,就输出,然后标记全部走了这个节点就不能走的节点。空间比較紧。5000*5000能够开int*2+bool*1,极限了。。

CODE:

#include <cstdio>
#include <algorithm>
#define MAX 5010
using namespace std; long long seed,a,b,c,d;
int arr[MAX * MAX],map[MAX][MAX];
bool v[MAX][MAX];
int ans[MAX << 1];
int m,n,asks; inline int GetX(); int main()
{
scanf("%lld%lld%lld%lld%lld%d%d%d",&seed,&a,&b,&c,&d,&m,&n,&asks);
for(int i = 1;i <= m * n; ++i)
arr[i] = i,swap(arr[i],arr[GetX() % i + 1]);
for(int x,y,i = 1;i <= asks; ++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)
map[i][j] = arr[(i - 1) * n + j];
for(int i = 1;i <= m; ++i)
for(int j = 1;j <= n; ++j)
arr[map[i][j]] = (i - 1) * n + j;
for(int i = 1;i <= m * n; ++i) {
int x = arr[i] / n + 1 - (arr[i] % n == 0);
int 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 > 0; --k) {
if(v[j][k]) break;
v[j][k] = true;
}
for(int j = x - 1;j > 0; --j)
for(int k = y + 1;k <= n; ++k) {
if(v[j][k]) break;
v[j][k] = true;
}
}
}
return 0;
} inline int GetX()
{
return seed = (a * seed * seed % d + b * seed % d + c) % d;
}

BZOJ 3671 NOI 2014 随机数生成器 贪心的更多相关文章

  1. 贪心 BZOJ 3671:[Noi2014]随机数生成器

    Description   Input 第 1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 ...

  2. 解题:NOI 2014 随机数生成器

    题面 为什么NOI2014有模拟题=.=??? 按题意把序列生成出来之后,对每一行维护一个能取到的最左侧和能取到的最右侧.从小到大$O(n^2)$枚举数字看看能否填入,能填入则暴力$O(n)$更新信息 ...

  3. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  4. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

  5. luogu P2354 [NOI2014]随机数生成器 贪心 卡空间 暴力

    LINK:随机数生成器 观察数据范围还是可以把矩阵给生成出来的. 考虑如何求出答案.题目要求把选出的数字从小到大排序后字典序尽可能的小 实际上这个类似于Mex的问题. 所以要从大到小选数字 考虑选择一 ...

  6. bzoj 3671 [Noi2014]随机数生成器——贪心(时间复杂度分配)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3671 设 x 为一个点的行号, y 为一个点的列号:原本想着判断一个点能不能选就是看选了的点 ...

  7. BZOJ 3672 NOI 2014 购票

    题面 Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市 ...

  8. BZOJ3671: [Noi2014]随机数生成器(贪心)

    Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 2098  Solved: 946[Submit][Status][Discuss] Descripti ...

  9. 【bzoj3671】[Noi2014]随机数生成器 贪心

    题目描述 输入 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M 的排列来填入她 N ...

随机推荐

  1. matplotlib 可视化 —— 绘制常见图形

    0. 饼状图 plt.pie():Python数据可视化:饼状图 1. 三角形 描点连线,起点和终点相同 triangle1 = ((0, sqrt(3)/2), (1, 3*sqrt(3)/2), ...

  2. <a>标签是什么意思 怎么使用?

    转自:https://www.imooc.com/qadetail/190881 (1) a标签的作用:超链接,用于跳转到别的网页. (2) a标签的用法:<a href="网址&qu ...

  3. Internet Explorer Developer Channel 自动化测试 IE 浏览器

    IE 原生 Web Driver 调用,通过简单配置,即可自动化测试 IE 浏览器(目前仅限 Internet Explorer Developer Channel 版本).做一些自动化的操作,都是很 ...

  4. cnmp安装失败,报错npm ERR! enoent ENOENT: no such file or directory,

    1.cnmp安装失败 2.提示如下: bogon:node_modules liangjingming$ sudo npm install cnpm -g --registry=https://reg ...

  5. hive parquet table 配置使用压缩

    创建parquet table : create table mytable(a int,b int) STORED AS PARQUET; 创建带压缩的parquet table: create t ...

  6. php--防止DDos攻击代码

    <?php //查询禁止IP $ip =$_SERVER['REMOTE_ADDR']; $fileht=".htaccess2"; if(!file_exists($fil ...

  7. linux上编译好的php添加memcache扩展

            cd /usr/local/src/ src>wget http://memcached.org/files/memcached-1.4.35.tar.gz src>tar ...

  8. linux下搭建NFS服务器

    服务端:10.6.191.183 客户端:10.6.191.182 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984 ...

  9. NodeJS代码调试

    1.在Chrome打开chrome://flags/#enable-devtools-experiments 2.激活Developer Tools experiments 3.重启Chrome 4. ...

  10. cmder-替代cmd

    之所以选择cmder,说来话长,在学习python的过程中,由于经常通过pip命令安装包,并且在学习一些包的使用例如virtualenv,教程贴都是在终端下的命令,这使我对cmd的使用频率慢慢变多了起 ...