【bzoj1407】 Noi2002—Savage
http://www.lydsy.com/JudgeOnline/problem.php?id=1407 (题目链接)
题意
有$n$个原始人他们一开始分别住在第$c[i]$个山洞中,每过一年他们都会迁往第$(c[i]+p[i])%m$个山洞,每个原始人的寿命分别为$l[i]$,求他们在生命终结前使没有两个人同住一个山洞中时最少需要有多少个山洞。
Solution
我们可以枚举答案$m$。
根据条件设经过$x$年后两个原始人$i$,$j$相撞。$$c[i]+p[i]*x=c[j]+p[j]*x~(mod~m)$$
$$(p[i]-p[j])*x=c[j]-c[i]~(mod~m)$$
$$(p[i]-p[j])*x+m*y=c[j]-c[i]$$
这样就可以exgcd做了。
若$gcd(p[i]-p[j],m)$不是$c[j]-c[i]$的约数,那么他们永远不可能相遇。
若求出来的最小正数$x$小于他们两个的寿命,那么当前的$m$就不合法。
代码
// bzoj1407
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; int n,c[20],p[20],l[20]; void exgcd(int a,int b,int &d,int &x,int &y) {
if (b==0) {d=a;x=1;y=0;return;}
exgcd(b,a%b,d,y,x);
y-=(a/b)*x;
}
bool check(int m) {
int d,x,y;
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++) {
int C=((c[j]-c[i])%m+m)%m;
int P=((p[i]-p[j])%m+m)%m;
exgcd(P,m,d,x,y);
if (C%d!=0) continue;
x=((C/d)*x%(m/d)+(m/d))%(m/d);
if (x<=l[i] && x<=l[j]) return 0;
}
return 1;
}
int main() {
scanf("%d",&n);
int ans=0;
for (int i=1;i<=n;i++) {
scanf("%d%d%d",&c[i],&p[i],&l[i]);
ans=max(ans,c[i]);c[i]--;
}
for (;ans<=1000000;ans++) if (check(ans)) break;
printf("%d",ans);
return 0;
}
【bzoj1407】 Noi2002—Savage的更多相关文章
- 【BZOJ1408】[Noi2002]Robot DP+数学
[BZOJ1408][Noi2002]Robot Description Input Output Sample Input 3 2 1 3 2 5 1 Sample Output 8 6 75 HI ...
- 【BZOJ 1407】[Noi2002]Savage ExGCD
我bitset+二分未遂后就来用ExGCD了,然而这道题的时间复杂度还真是玄学...... 我们枚举m然后对每一对用ExGCD判解,我们只要满足在最小的一方死亡之前无解就可以了,对于怎么用,就是ax+ ...
- 【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- 【bzoj1408】 Noi2002—Robot
http://www.lydsy.com/JudgeOnline/problem.php?id=1408 (题目链接) 题意 定义了3种数,分别求这3种数的φ的和,其中φ(1)=0. Solution ...
- 【bzoj1408】[Noi2002]Robot 数论+dp
题目描述 输入 输出 样例输入 3 2 1 3 2 5 1 样例输出 8 6 75 题解 语文题+数论+dp 花了大段讲述什么叫mu,什么叫phi,只是新定义的mu将2看作有平方因子,新定义的phi( ...
- BZOJ1407 NOI2002 Savage 【Exgcd】
BZOJ1407 NOI2002 Savage Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...
- 洛谷 1196 [NOI2002]银河英雄传说【模板】带权并查集
[题解] 经典的带权并查集题目. 设cnt[i]表示i前面的点的数量,siz[i]表示第i个点(这个点是代表元)所处的联通块的大小:合并的时候更新siz.旧的代表元的cnt,路径压缩的时候维护cnt即 ...
- 【SpringBoot】SpingBoot整合AOP
https://blog.csdn.net/lmb55/article/details/82470388 [SpringBoot]SpingBoot整合AOPhttps://blog.csdn.net ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
随机推荐
- 轉發XML
Delphi 中的 XMLDocument 类详解(3) - 读取 xml 文件 先虚拟一个测试文件: test.xml; 放在 c:\temp\ 下备用. <?xml version=&quo ...
- Query on a tree——树链剖分整理
树链剖分整理 树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护. 通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中s ...
- css3 box-sizing属性
个人总结: 如果需要兼容IE6 IE7,使用content-box.现在流行bootstrap3,需注意它使用的是border-box. box-sizing属性可以为三个值之一:content-bo ...
- BZOJ 2957 楼房重建
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- ValidateAntiForgeryToken 防止CSRF(跨网站请求伪造)
用途:防止CSRF(跨网站请求伪造). 用法:在View->Form表单中:<%:Html.AntiForgeryToken()%> 在Controller->Action动作 ...
- iOS APNS配置(转)
Introduction To send Push notification to an application/device couple you need an unique device tok ...
- 金旭亮老师的Scoekt编程摘要
Socket提供了众多的属性,还提供了SetSocketOption方法来设置各种选项,对.NET网络应用程序的数据通讯进行“微调”. Socket的功能出奇地强大,在.NET平台上,它支持以下 ...
- TelephonyManager类与PhoneStateListener
public class TelephonyManager extends Object java.lang.Object android.telephony.TelephonyManage ...
- IE8下获取iframe document EVENT对象的问题
在一个页面中设置iframe的document Onclick 事件获取在iframe中的document被点击的对象,W3C如下: document.getElementById('iframe的I ...
- 使Eclipse符合Java编程规范
编程规范是很重要的东西,能让团队的代码易于阅读和维护,也便于日后的功能扩展. 工欲善其事必先利其器!作为一个Java程序员,与Eclipse打交道可能是一辈子的事情.将Eclipse设置为符合公司编程 ...