【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
题面
题解
先不管\(0\)位置是个空,把它也看成一个箱子。那么最终的答案显然和置换循环节的个数相关,对于大小为\(1\)的循环,显然就是不要动。对于大小为\(L\)的循环,如果包含\(0\)位置,显然还要动\(L-1\)次,如果不包含\(0\)位置,显然要先把\(0\)位置弄进这个环里面来,再把它移出去,也就是\(L+1\)次。那么我们就可以很容易的计算答案。
然而现在最大的难题变成了如何计算最终位置了。
对于每个位置,我们不难发现随着\(x\)的增大,关于\(n\)的余数一定是一个个的环。那么我们考虑枚举\(y\)值,检查\(y\)固定时,对应的这个环上是否还有空位,如果有就放进去。这个空位可以用并查集维护,每次将当前放完的位置指向下一个位置,即\(+d\)的位置。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int C[MAX],pos[MAX];
int n,S,Q,P,M,D;
int f[MAX];bool vis[MAX];
int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
void merge(int u,int v){f[getf(u)]=getf(v);}
int main()
{
int T=read();
while(T--)
{
n=read();S=read();Q=read();P=read();M=read();D=read();
for(int i=1;i<n;++i)C[i]=(1ll*C[i-1]*Q+P)%M;
for(int i=0;i<n;++i)f[i]=i;
memset(vis,0,sizeof(vis));
pos[0]=S;vis[S]=true;merge(S,(S+D)%n);
for(int i=1;i<n;++i)
{
int x=getf(C[i]%n),y=0;
while(vis[x])++y,x=getf((C[i]+y)%n);
pos[i]=x;vis[x]=1;merge(x,(x+D)%n);
}
memset(vis,0,sizeof(vis));int ans=0,gr=0;
for(int i=0;i<n;++i)
if(!vis[i])
{
int tot=0,u=i;
while(!vis[u])++tot,vis[u]=true,u=pos[u];
if(tot>1)ans+=tot,++gr;
}
if(!pos[0])ans+=gr;else ans+=gr-2;
printf("%d\n",ans);
}
return 0;
}
【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)的更多相关文章
- HNOI 2010 物品调度 并查集 置换
题意: 题意有点细,暂不概括.请仔细审题. 分析: 我们先要把c生成出来. 记得颜神讲这道题,首先表明,这道题有两个问题需要处理. 第一个是要先定位,第二个是要求最小移动步数. 定位时对于每一个物品i ...
- hdu-1198 Farm Irrigation---并查集+模拟(附测试数据)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目大意: 有如上图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种 ...
- Codeforces 980 并查集/模拟贪心最小字典序 找规律/数去除完全平方因子 逆思维倍增预处理祖先标记点
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- [HNOI2010]物品调度
题目描述 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号,一开始0号位置空,其它的位置i上有编号为i的盒子.Lostm ...
- 洛谷 - P4997 - 不围棋 - 并查集 - 模拟
https://www.luogu.org/problemnew/show/P4997 首先是改变气的定义,使得容易计算,这个很好理解. 然后使用并查集,因为要维护整个连通块的性质. 最后的难点在于, ...
- [HNOI2010] 物品调度 fsk
标签:链表+数论知识. 题解: 对于这道题,其实就是两个问题的拼凑,我们分开来看. 首先要求xi与yi.这个可以发现,x每增加1,则pos增加d:y每增加1,则pos增加1.然后,我们把x与y分别写在 ...
- P3207 [HNOI2010]物品调度
传送门 完了题目看错了--还以为所有的\(x,y\)都要一样--结果题解都没看懂-- 先考虑如果已经求出了所有的\(pos\)要怎么办,那么我们可以把\(0\)也看做是一个箱子,然后最后每个箱子都在一 ...
- (并查集)~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个物品之间的影响值.当把这 ...
随机推荐
- 用c#开发微信 系列汇总 - z
http://www.cnblogs.com/txw1958/ http://www.cnblogs.com/fengwenit/p/4505062.html
- excel的宏与VBA入门——代码调试
直接介绍重点: 常用的操作是导航栏的逐句与断点: 添加断点:调试->切换断点 单步运行:调试->逐句 查看变量的窗口:视图->本地窗口
- RabbmitMQ-工作队列及相关概念
工作队列-WorkQueue 实现功能: 将耗时的任务分发给多个工作者 设计思想: 避免直接去做一件资源密集型的任务,并且还得等它完成.因此将任务安排后再去做.将任务封装为一个消息,发到队列中.一个工 ...
- Codeforces 718C solution
C. Sasha and Array time limit per test : 5 seconds memory limit per test : 256 megabytes Descrip ...
- 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)
雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...
- 基于HTML5 WebGL实现 json工控风机叶轮旋转
突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...
- 饿了么element UI<el-dialog>弹出层</el-dialog>修改默认样式不能在<style scoped>修改
如果在非scoped下,修改el-dialog自动添加的DIV类名的style加上important,可以覆盖原来的width,但这样会让整个项目的样式都乱套. 如果在scoped下修改style.所 ...
- Individual Project-word frequency
预计时间: 项目要求理解:半小时 c#语言了解:6小时 构思程序框架:2小时 编写调试程序:4小时 项目实际完成时间: 项目要求理解:半小时 c#语言了解:6小时 构思程序框架:2小时 编写调试程序: ...
- 软工个人作业-博客作业-WEEK2
1.是否需要代码规范: (1)这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 首先来说,从短期上和个体上来看,一个团队的代码风格必然会在一定程 ...
- json.dumps()和json.loads()
json.dumps()用于将字典形式的数据转化为字符串,json.loads()用于将字符串形式的数据转化为字典,代码: import json data = { 'name' : 'Connor' ...