洛谷上卡不过去的朋友们可以来看看小C的程序(小C才不是标题党呢!)

Description

  

Input

  第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子。

  第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M 的排列来填入她 N 行 M 列的棋盘,并且小H在初始的 N×M 次交换操作后,又进行了 Q 次额外的交换操作。

  接下来 Q 行,第 i 行包含两个整数 u_i,vi,表示第 i 次额外交换操作将交换 T(ui )和 T(v_i ) 的值。

Output

  输出一行,包含 N+M-1 个由空格隔开的正整数,表示可以得到的字典序最小的路径序列。

Sample Input

  1 3 5 1 71
  3 4 3
  1 7
  9 9
  4 9

Sample Output

  1 2 6 8 9 12

HINT

  

Solution

  奇技淫巧题,卡时卡空间,考出了WC的画风。

  相信O(nmlog(n+m))的做法大家都会。

  一通模拟过后,基本思路就是贪心,每次选最小的数,能加就加,加入之后更新限制范围……你懂的。

  

  很多做法,一种是用set或平衡树来维护限制范围,还有一种就是直接在数组上二分,插入时暴力插入。

  小C觉得第一种常数很大并且懒得写平衡树,所以就写了第二种。复杂度O(nmlog(n+m)+(n+m)^2)。

  注意代码上各种会影响常数的细节,如取模等。

  当你绞尽脑汁试图扭曲你的代码去卡过那万恶的常数时,不如再想想强有力的剪枝。

  我们发现每条斜线上有且仅有一个数会被记入答案,不妨开一个bool数组来标记一下。

  整整快了一倍有木有!

#include <cstdio>
#include <algorithm>
#define MM 25000005
#define MN 5005
#define make(a1,a2) ((pr){a1,a2})
#define l(a) (a.x)
#define r(a) (a.y)
using namespace std;
struct pr{int x,y;}pa[MN<<];
int X,A,B,C,D;
int n,m,gs,p,nm,a[MM],b[MM];
bool u[MN<<]; inline int read()
{
int n=,f=; char c=getchar();
while (c<'' || c>'') {if(c=='-')f=-; c=getchar();}
while (c>='' && c<='') {n=n*+c-''; c=getchar();}
return n*f;
} bool cmp(pr a,pr b) {return a.x<b.x || a.x==b.x && a.y<b.y;} int main()
{
register int i,j,x;
pr z;
X=read(); A=read(); B=read(); C=read(); D=read();
n=read(); m=read(); p=read(); nm=n*m;
for (i=;i<=nm;++i)
{
X=((1LL*A*X+B)*X+C)%D;
a[i]=i; swap(a[i],a[(X%i)+]);
}
while (p--) swap(a[read()],a[read()]);
for (i=;i<=nm;++i) b[a[i]]=i-;
pa[gs=]=make(MN,MN);
for (i=;i<=nm;++i)
{
z=make(b[i]/m,b[i]%m);
if (u[l(z)+r(z)]) continue;
x=lower_bound(pa+,pa+gs+,z,cmp)-pa;
if (r(z)>r(pa[x])||r(z)<r(pa[x-])) continue;
for (j=gs++;j>=x;--j) pa[j+]=pa[j];
u[l(z)+r(z)]=true; pa[x]=z;
if (i>) putchar(' '); printf("%d",i);
}
}

Last Word

  在考场上谁会知道自己的程序会被卡成什么样呢?大概只有写完程序发现跑了5.X秒然后在程序末尾加上"orz ditoly"来保平安了吧。

  不过仔细想想这样的优化还是能想得到的。

  看看BZOJ上一个个只跑了20s的dalao们,感觉没有人A还要求放宽时限的洛谷还是Too Young。

  n+e光速读入用在这道题上是杯水车薪。

[BZOJ]3671 随机数生成器(Noi2014)的更多相关文章

  1. bzoj 3671 随机数生成器 —— 暴力

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3671 原来256M是可以开两个3e7的数组的: 因为答案只有 n+m-1 个数,所以暴力判断 ...

  2. bzoj 3122 随机数生成器 - BSGS

    Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数.   接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. ...

  3. BZOJ 3122 随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 题意:给出p,a,b,x1,t 已知xn=a*xn-1+b%p,求最小的n令xn=t 首先,若 ...

  4. BZOJ 2875 随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2875 题意:给出mod,a,c,g,x0,n,xn=(a*xn-1+c)%mod,求xn%g 求A* ...

  5. 【BZOJ】【3671】【NOI2014】随机数生成器

    贪心 嗯……其实生成这个矩阵就是一个$O(n^2)$的模拟 = = 然后?字典序最小?贪心呗= =能选1就选1,然后能选2就选2…… 我们发现,对于矩阵(1,1)~(n,m),假设1的位置是(x,y) ...

  6. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

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

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

  8. 【BZOJ3671】[Noi2014]随机数生成器 暴力

    [BZOJ3535][Noi2014]随机数生成器 Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个 ...

  9. BZOJ_3671_[Noi2014]随机数生成器_set+贪心

    BZOJ_3671_[Noi2014]随机数生成器_set Description   Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第 ...

随机推荐

  1. python之路--day13---函数--三元表达式,递归,匿名函数,内置函数-----练习

    1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female ...

  2. Spring Boot 配置文件详解

    Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...

  3. Python脚本自动提取和替换代码中的中文

    # -*- coding: utf-8 -*- import os import os.path import re import sys reload(sys) sys.setdefaultenco ...

  4. 深度学习之 seq2seq 进行 英文到法文的翻译

    深度学习之 seq2seq 进行 英文到法文的翻译 import os import torch import random source_path = "data/small_vocab_ ...

  5. 新概念英语(1-47)A cup of coffee

    新概念英语(1-47)A cup of coffee How does Ann like her coffee? A:Do you like coffee, Ann? B:Yes, I do. A:D ...

  6. .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档

    前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...

  7. LayUI之table数据表格获取行、行高亮等相关操作

    前言 目前LayUI数据表格既美观有不乏一些实用功能.基本上表格应有的操作已经具备,LayUI作者[贤心]肯定是煞费苦心去优化,此处致敬.但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格 ...

  8. 定点化_mif文件生成

    clc; %全屏清零 clear all; %变量清零 N=^; %设置ROM深度(字变量)的变量参数, s_p=:; %正弦波一个周期的采样点数 sin_data=sin(*pi*s_p/N); % ...

  9. Django--ORM基本操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  10. cdoj 1092 韩爷的梦

    http://acm.uestc.edu.cn/#/problem/show/1092 题意:略 思路: 做的第一道字符串hash的题,真是菜啊,还是看了几篇题解才会做的.字符串hash感觉就是函数的 ...