bzoj1407 [Noi2002]Savage——扩展欧几里得
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407
看到一定有解,而且小于10^6,所以可以枚举;
判断一个解是否可行,就两两判断野人 i , j 能否满足在寿命内不相遇;
也就是 T*pi + ci ≡ T*pj + cj (mod m)
变成 ( pi - pj )*T + km = cj - ci
用扩展欧几里得解这个方程,得到T若大于两人中较小的寿命或无解则可行。
代码如下:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- using namespace std;
- int n,m,c[],p[],l[];
- int gcd(int a,int b){return (a%b==)?b:gcd(b,a%b);}
- void exgcd(int a,int b,int &x,int &y)
- {
- if(b==)
- {
- x=; y=; return;
- }
- exgcd(b,a%b,x,y);
- int t=x;
- x=y;
- y=t-(a/b)*y;
- }
- bool ck(int m)
- {
- for(int i=;i<n;i++)
- for(int j=i+;j<=n;j++)
- {
- int a=p[i]-p[j],b=m,cc=c[j]-c[i];
- int g=gcd(a,b);
- // if(cc%g)return 0;
- if(cc%g)continue;//无解也满足
- a/=g; b/=g; cc/=g;
- int x,y;
- // b=abs(b);
- if(b<)b=-b;
- exgcd(a,b,x,y);
- x=((x*cc)%b+b)%b;//先%b!
- // x=(x*cc+b)%b;
- if(x<=min(l[i],l[j]))return ;
- }
- return ;
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;i++)scanf("%d%d%d",&c[i],&p[i],&l[i]),m=max(m,c[i]);
- for(int i=m;i<=1e6;i++)
- if(ck(i))
- {
- printf("%d",i); return ;
- }
- }
bzoj1407 [Noi2002]Savage——扩展欧几里得的更多相关文章
- bzoj [Noi2002]Savage 扩展欧几里得
枚举m,n^2判断 对于野人i,j,(H[i]+x*S[i])%m==(H[j]+x*S[j])%m,且x<=O[i]&&x<=O[j],他们才有可能相遇 化简得:(S[i ...
- [Noi2002]Savage(欧几里得拓展)
题意:在一个岛上,有n个野人.这些人开始住在c号洞穴,每一年走p个洞,而且他的生命有L年.问如果岛上的洞穴为一个圈,那么这个圈至少有多少个,才能使他们每年都不在同一个洞穴里. 分析:先假设一种简单的情 ...
- JZYZOJ1372 [noi2002]荒岛野人 扩展欧几里得
http://172.20.6.3/Problem_Show.asp?id=1372 想法其实很好想,但是我扩展欧几里得还是用得不熟练,几乎是硬套模板,大概因为今天一个下午状态都不大好.扩展欧几里得算 ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
- UVA 12169 Disgruntled Judge 枚举+扩展欧几里得
题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...
- UVA 10090 Marbles 扩展欧几里得
来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
- BZOJ1407 [Noi2002]Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
随机推荐
- buf.compare()
buf.compare(otherBuffer) otherBuffer {Buffer} 返回:{Number} 比较两个 Buffer 实例,无论 buf 在排序上靠前.靠后甚至与 otherBu ...
- PHP 反射API
出处:http://blog.csdn.net/hguisu/article/details/7357421 PHP5添加了一项新的功能:Reflection.这个功能使得phper可以reverse ...
- <git>……git的基本使用……//
1.切换到存放git版本库的地方 2.Git clone url(github上的地址) 3.设置全局用户(输入一次即可) git config --global user.name github上的 ...
- Springboot开启事务
参考资料: https://blog.csdn.net/message_lx/article/details/77584847
- js用for...in 这种遍历的方式
var arr = new Array("first", "second", "third") for(var item in arr) { ...
- 九度oj 题目1074:对称平方数
题目1074:对称平方数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6422 解决:2912 题目描述: 打印所有不超过n(n<256)的,其平方具有对称性质的数. 如11*11 ...
- HDU 5024
题目大意: 在2个图上显示为'.'的位置建两座房间,保证这两间房子中间只转一个90度的弯,可以斜着走,问能建成房子的最远的路程长度为多少 暴力枚举 因为有8个方向,但横竖走和斜着走是不会产生90度角的 ...
- android中SQLite实现
SQLite操作类: package com.example.administrator.myapplication; import android.content.Context; import a ...
- Visual C++ 网络编程 笔记
第一章 网络分层模型 OSI模型应用层:服务于应用程序的协议,比如用于域名解析的DNS协议,用于下载界面内容的HTTP协议表示层:处理不同硬件和操作系统之间的差异,确保应用层之间顺利通信 and 加密 ...
- response的作用
response.addCookies(),添加Cookie. response.sendRedirect()页面跳转,客户端跳转.(能够取到request)