HNOI 2010 物品调度 并查集 置换
题意:
题意有点细,暂不概括。请仔细审题。
分析:
我们先要把c生成出来。
记得颜神讲这道题,首先表明,这道题有两个问题需要处理。
第一个是要先定位,第二个是要求最小移动步数。
定位时对于每一个物品i,要在不与之前物品冲突的基础上保证y最小,然后x最小。
可以想到,如果没有c,当y一定时,枚举x就相当于在一个环上不断向后移动d个位置,可以想到,当枚举到一定程度时,会回到原来的位置。
这样呢,为了不冲突,我们就只能利用调整y来摆脱窘境。
所以一个思路就出来了,我们从小到大枚举y,对于每个y,我们把满足(ci+d*xi+yi) mod n的位置都不重复地占满,此时就要继续让y变大再寻找空位了。
序列c存在的意义是什么???我想仅仅是为了使这一步没有数学规律吧……
这样呢,我们就确定了一个终序列,此时就需要拿出置换相关的知识,来求最小步数了。
因为我们只有一个空位可起到容器的作用,两个实际的物品也不能直接交换,所以容易发现,一个置换要想完成,就必须要完成若干个类似环的操作(相当于空位在环上走)。但是,如果环上没有空位怎么办??
就要分类讨论。
首先,如果我们找到的一个环上有空位,那么这个环产生的代价最小是环长-1(因为有个空位)
但是如果环上没有空位,那么产生的代价是环长+1(因为要把空位先换过来,产生1的代价,最终要把空位归位或者哪来的环会哪去,又产生1的代价)
致此,这道题就差不多做完了。
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=;
bool v[N];ll c[N];int s,d;
int fa[N],pos[N],t,n,m,p,q;
int get(int x){
return fa[x]==x?x:fa[x]=get(fa[x]);
} int main(){
scanf("%d",&t);
while(t){ t--;
scanf("%d%d%d%d%d%d",&n,&s,&q,&p,&m,&d);
for(int i=;i<n;i++) fa[i]=i,v[i]=;
pos[]=s;v[s]=;fa[s]=(s+d)%n;
for(int i=;i<n;i++) c[i]=(c[i-]*q+p)%m;
for(int i=;i<n;i++){
int y=;
while(v[get((y+c[i])%n)]) y++;
pos[i]=get((y+c[i])%n);
v[pos[i]]=;
fa[pos[i]]=get((pos[i]+d)%n);
} memset(v,,sizeof(v));int ans=;
for(int i=;i<n;i++){
if(v[i]||pos[i]==i) continue;
int cur=i,l=;bool bs=;
while(!v[cur]){
if(!cur) bs=;l++;
v[cur]=;cur=pos[cur];
} if(bs) ans+=(l-);
else ans+=(l+);
} printf("%d\n",ans);
} return ;
}
置换
HNOI 2010 物品调度 并查集 置换的更多相关文章
- BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置 ...
- 【BZOJ 1998】 1998: [Hnoi2010]Fsk物品调度(双向链表+并查集+置换)
1998: [Hnoi2010]Fsk物品调度 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号 ...
- NOIP 2010 关押罪犯 并查集 二分+二分图染色
题目描述: S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值" ...
- (并查集)~APTX4869(fzu 2233)
http://acm.fzu.edu.cn/problem.php?pid=2233 Problem Description 为了帮助柯南回到一米七四,阿笠博士夜以继日地研究APTX4869的解药.他 ...
- FZu Problem 2233 ~APTX4869 (并查集 + sort)
题目链接: FZu Problem 2233 ~APTX4869 题目描述: 给一个n*n的矩阵,(i, j)表示第 i 种材料 和 第 j 种材料的影响值,这个矩阵代表这n个物品之间的影响值.当把这 ...
- 【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
[BZOJ1998][HNOI2010]物品调度(并查集,模拟) 题面 BZOJ,为啥这题都是权限题啊? 洛谷 题解 先不管\(0\)位置是个空,把它也看成一个箱子.那么最终的答案显然和置换循环节的个 ...
- BZOJ 1998: [Hnoi2010]Fsk物品调度 [置换群 并查集]
传送门 流水线上有n个位置,从0到n-1依次编号,一开始0号位置空,其它的位置i上有编号为i的盒子.Lostmonkey要按照以下规则重新排列这些盒子. 规则由5个数描述,q,p,m,d,s,s表示空 ...
- 【BZOJ 1998】[Hnoi2010]Fsk物品调度 置换群+并查集
置换群的部分水得一比,据说是经典的置换群理论(然而我并不知道这理论是啥).重点就在于怎么求pos!!!容易发现这个东西是这样的:每次寻找pos,先在本环里找,找不到再往下一个环里找,直到找到为止……一 ...
- hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)
这道题说,在很久很久以前,有一个故事.故事的名字叫龙珠.后来,龙珠不知道出了什么问题,从7个变成了n个. 在悟空所在的国家里有n个城市,每个城市有1个龙珠,第i个城市有第i个龙珠. 然后,每经过一段时 ...
随机推荐
- VMware 12PRO安装Mac OS X 10.10.5
插件安装 步骤一完成后,打开任务管理器,找到服务项,选择按名称排序,将框中四项全部停止运行. 然后打开下载的插件,解压unlocker206.zip文件,找到 unlocker206\win-in ...
- Linux 软链接 硬链接 ln命令(简约说明版)
注意:路径使用绝对路径!! 解决方法: 当我们需要在不同的目录下用到同一个文件时,会用到以下命令. 命令:ln 作用:为某一个文件在另外一个位置建立一个同步的链接 语法:ln [option] 源文件 ...
- bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】
枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...
- 我的ubuntu连vi都没有??那在命令行怎么编辑文件??
今天弄了个docker下的ubuntu官方镜像,想在镜像里做一点实验,免得把自己的环境写得乱七八糟. 把代码文件mount进去之后,开始编译,但是镜像太干净了,什么工具都没有,于是先装cmake ap ...
- APP多渠道打包
多渠道打包的概念: 打包是指使用证书文件对app签名生成一个apk文件. 多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场.百度市场等,为了统计应用在各个市场的 ...
- 线程池机制使nginx性能提高9倍
原文标题:Thread Pools in NGINX Boost Performance 9x! 原文官方地址:https://www.nginx.com/blog/thread-pools-boos ...
- 写给W小姐的一封信
生活 琐碎 Hallo,Preaty.对于跟人说话,我很不擅长如何开头.我不知道什么样的开头是符合我在别人心目中我应有的形象.我不知道什么样的开头符合别人预想中与我相匹配的内容.或者说什么的开头才是一 ...
- SSM学习
一.https://www.cnblogs.com/zyw-205520/p/4771253.html 二.https://blog.csdn.net/dwhdome/article/details/ ...
- AJPFX关于static总结
static 总结 static Fields static Methods static member class static initializer-- ...
- 【工具】sublime使用技巧
Ctrl+N 新建一个编辑区,Ctrl+Shift+C 或!加 Ctrl+E新建一个骨架完好的文件. Ctrl+Shift+P开启命令模式,sshtml 切换html语法. esc退出,Ctrl+`打 ...