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的更多相关文章

  1. 【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 ...

  2. 【BZOJ 1407】[Noi2002]Savage ExGCD

    我bitset+二分未遂后就来用ExGCD了,然而这道题的时间复杂度还真是玄学...... 我们枚举m然后对每一对用ExGCD判解,我们只要满足在最小的一方死亡之前无解就可以了,对于怎么用,就是ax+ ...

  3. 【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,

    题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...

  4. 【bzoj1408】 Noi2002—Robot

    http://www.lydsy.com/JudgeOnline/problem.php?id=1408 (题目链接) 题意 定义了3种数,分别求这3种数的φ的和,其中φ(1)=0. Solution ...

  5. 【bzoj1408】[Noi2002]Robot 数论+dp

    题目描述 输入 输出 样例输入 3 2 1 3 2 5 1 样例输出 8 6 75 题解 语文题+数论+dp 花了大段讲述什么叫mu,什么叫phi,只是新定义的mu将2看作有平方因子,新定义的phi( ...

  6. BZOJ1407 NOI2002 Savage 【Exgcd】

    BZOJ1407 NOI2002 Savage Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...

  7. 洛谷 1196 [NOI2002]银河英雄传说【模板】带权并查集

    [题解] 经典的带权并查集题目. 设cnt[i]表示i前面的点的数量,siz[i]表示第i个点(这个点是代表元)所处的联通块的大小:合并的时候更新siz.旧的代表元的cnt,路径压缩的时候维护cnt即 ...

  8. 【SpringBoot】SpingBoot整合AOP

    https://blog.csdn.net/lmb55/article/details/82470388 [SpringBoot]SpingBoot整合AOPhttps://blog.csdn.net ...

  9. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

随机推荐

  1. DataReader用法

    一.DataReader含义 DataReader相比于DataSet,DataReader是一个抽象类,所以不能用DataReader DR = new DataReader(),来构造函数创建对象 ...

  2. python学习之用正则处理log(持续更新,ftace)

    1. ftrace的输出如下图所示: [003] 48375.494595: clear_buddies <-pick_next_entity m=re.match("^\[([0-9 ...

  3. 表单验证——JavaScript和Jquery版

    1.轻量级的JavaScript表单验证 在应用中引用 validator.min.js 文件 <script type="text/javascript" src=&quo ...

  4. mysql ERROR 1045 (28000): Access denied for user解决方法

    一 这种情况下是 root@% update mysql.user set host='%' where user='root' and host='localhost'; flush privile ...

  5. Linux shell文本过滤

    正则表达式 --概念:一种用来描述文本模式的特殊语法 --由普通字符(例如:字符a到z),以及特殊字符(元字符,如/*?等)组成匹配的字符串 --文本过滤工具在某种模式之下,都支持正则表达式 --基本 ...

  6. spring-自动加载配置文件\使用属性文件注入

    在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到W ...

  7. Use Dapper ORM With ASP.NET Core

    Dapper.NET is not just another ORM tool, it's considered as the king of ORM. Because it's fast, easy ...

  8. JAVA对象和XML文档、原来他们之间还有这一出

    最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xm ...

  9. 日志记录类库log4net的使用总结

    log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等.这里写个ASP.NET MVC ...

  10. 简单Ztree的实现————不连接数据库版

    Ztree可以去官网去下载相应的版本和API,我这里就简单的介绍下它的实现以及因为Ztree的小例子印发的Js问题,稍后我会在博客中写JS的异步问题, 我这里用的是MVC4.0,好了正文开始,上代码 ...