BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
Description
Input
第一行包含一个整数t,表示数据组数。接下来t行,每行6个数,n,s,q,p,m,d意义如上所述。 对于30%的数据n<=100,对于100%的数据t<=20,n<=100000,s
Output
Sample Input
8 3 5 2 7 4
Sample Output
HINT
说明:第1个到第7个盒子的最终位置依次是:2 5 6 4 1 0 7
一开始没看懂题....
考虑先求出pos,题中已经给出了限制:如果有多个xi,yi满足要求,你需要选择yi最小的,当yi相同时选择xi最小的。
暴力怎么做,在ci这个位置,先看y=0时有没有剩下的,再看y=1....,然后找到一个最小的x。
相当于先+1+1+1再+d+d+d,考虑用并查集来维护删除过程。
两个并查集分别维护+1和+d,当+d的并查集出现环,说明这个环的都取走了,就更新+1的那个并查集。
pos求完了,对于每个环(大小为siz),如果环里有0,贡献为siz-1,否则贡献为siz+1。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 100050
int n,s,q,p,m,d,C[N],f1[N],f2[N],pos[N],vis[N];
int find1(int x) {return f1[x]==x?x:f1[x]=find1(f1[x]);}
int find2(int x) {return f2[x]==x?x:f2[x]=find2(f2[x]);}
int tx(int x) {return (x+d)%n;}
int ty(int x) {return (x+1)%n;}
void del(int x) {
if(find1(tx(x))==x) {
int y;
f2[x]=find2(ty(x)); for(y=x;tx(y)!=x;y=tx(y),f2[y]=find2(ty(y)));
}else {
f1[x]=find1(tx(x));
}
}
void solve() {
scanf("%d%d%d%d%d%d",&n,&s,&q,&p,&m,&d);
int i;
for(C[0]=0,i=1;i<n;i++) C[i]=(ll(C[i-1])*q+p)%m;
for(i=1;i<n;i++) C[i]=C[i]%n,f1[i]=f2[i]=i; f1[0]=f2[0]=0;
del(s); pos[0]=s;
for(i=1;i<n;i++) {
int p=C[i];
pos[i]=find1(find2(p));
del(pos[i]);
}
// for(i=0;i<n;i++) printf("%d\n",pos[i]);
memset(vis,0,sizeof(vis));
int ans=0;
for(i=0;i<n;i++) if(!vis[i]) {
int j,siz=1,flg=(i==0);
for(vis[j=i]=1;pos[j]!=i;j=pos[j],vis[j]=1,siz++) if(pos[j]==0) flg=1;
if(siz==1) continue;
if(flg) ans+=siz-1;
else ans+=siz+1;
}
printf("%d\n",ans);
}
int main() {
int T;
scanf("%d",&T);
while(T--) solve();
}
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换的更多相关文章
- 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,先在本环里找,找不到再往下一个环里找,直到找到为止……一 ...
- 【BZOJ 1998】 1998: [Hnoi2010]Fsk物品调度(双向链表+并查集+置换)
1998: [Hnoi2010]Fsk物品调度 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号 ...
- [BZOJ1998][Hnoi2010]Fsk物品调度
[BZOJ1998][Hnoi2010]Fsk物品调度 试题描述 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号,一开 ...
- 【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
[BZOJ1998][HNOI2010]物品调度(并查集,模拟) 题面 BZOJ,为啥这题都是权限题啊? 洛谷 题解 先不管\(0\)位置是个空,把它也看成一个箱子.那么最终的答案显然和置换循环节的个 ...
- 【BZOJ】1998: [Hnoi2010]Fsk物品调度
http://www.lydsy.com/JudgeOnline/problem.php?id=1998 题意: 给你6个整数$n,s,q,p,m,d$. 有$n$个位置和$n-1$个盒子,位置编号从 ...
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- BZOJ_2303_[Apio2011]方格染色 _并查集
BZOJ_2303_[Apio2011]方格染色 _并查集 Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好, ...
- BZOJ_1015_[JSOI2008]星球大战_并查集
BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
随机推荐
- mysql经常使用查询:group by,左连接,子查询,having where
前几天去了两个比較牛的互联网公司面试.在sql这块都遇到问题了,哎.可惜呀,先把简单的梳理一下 成绩表 score 1.group by 使用 按某一个维度进行分组 比如: 求每一个同学的总分 SEL ...
- java 开发环境安装
一.在mac上安装jdk 1. 下载Mac版本的JDK并安装 http://www.oracle.com/technetwork/java/javase/downloads/index.ht ...
- 1verilog 位拼接
位拼接还可以用重复法来简化表达式.见下例: {4{w}} //这等同于{w,w,w,w} 位拼接还可以用嵌套的方式来表达.见下例: {b,{3{a,b}}} //这等同 ...
- 【Java】 Spring依赖注入小试牛刀:编写第一个Spring ApplicationContext Demo
0 Spring的依赖注入大致是这样工作的: 将对象如何构造(ID是什么?是什么类型?给属性设置什么值?给构造函数传入什么值?)写入外部XML文件里.在调用者需要调用某个类时,不自行构造该类的对象, ...
- 资源重复 uac.res resource kept(转)
一般按照网上流传的方法制作UAC.RES放到DELPHI程序里面来就可以出现盾牌.但是某些DELPHI的项目在添加了UAC.RES后编译会报错,例如: [DCC Error] E2161 Warnin ...
- vsftpd 自动安装脚本
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'cpy' import os import re import sys impo ...
- 在 CentOS 6.4上安装Erlang
如何在CentOS 6.4上安装erlang,具体的Erlang版本是R15B03-1. 在安装之前,需要先要安装一些其他的软件,否则在安装中间会出现一些由于没有其依赖的软件模块而失败. 一开始,要是 ...
- 13-redis主从复制
一:redis主从复制 (1)配置要求 一台主maste 二台从slave (2)架构图 (3)配置流程 1:分配拷贝2份redis.conf 分别命名为 redis6380.conf redis63 ...
- ASP.NET RemoteAttribute远程验证更新问题
create时使用remote特性没有任何问题, update时,问题就大了,验证唯一性时需要排除自身,如果使用这个特性将无法正确的验证. 改进思路:将自动生成的标签属性改为手写,,并在url上面加上 ...
- 【Atheros】禁用CSMA之后pktgen发包一分钟后无法发送的问题
无线网络中各个节点不断地广播信标帧,收到某节点的信标帧之后才知道这个节点存在,知道它的网络配置是怎么样的,才能知道应该怎么和它通信. 那么问题来了,禁用了CSMA之后,发送节点全力发送,那么它会永远占 ...