bzoj1407,洛谷2421 NOI2002荒岛野人
题目大意:
克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。
每个野人i有一个寿命值Li,即生存的年数。
奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇。他们想知道,至少有多少个山洞,才能维持岛上的和平呢?
输入输出格式
输入格式:
第1行为一个整数N(1<=N<=15),即野人的数目。
第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。
输出格式:
仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。
其实这道题和洛谷的1516非常像。
那么对于这道题,我们只需要枚举一下这个m,然后\(n^2\times log\)判断就可以,我们对于一个枚举到的m
实际上是求解$$c_i+p_ix=c_j+p+jx \pmod m$$
那么进行一波操作
\]
直接exgcd求解即可
如果最终求得的x\(min(l_i,l_j)\)
需要注意的是!!!求最小正整数解的时候!!要注意模数小于0的情况
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
const int maxn = 21;
ll c[maxn],p[maxn],l[maxn];
ll x,y;
int n;
ll gc(ll a,ll b)
{
if (b==0) return a;
else return gc(b,a%b);
}
ll exgcd(ll &x,ll &y,ll a,ll b)
{
if (b==0)
{
x=1;
y=0;
return a;
}
ll cnt = exgcd(x,y,b,a%b);
ll tmp = x;
x=y;
y=tmp-a/b*y;
return cnt;
}
bool check(ll m)
{
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
{
ll gcd=exgcd(x,y,p[i]-p[j],m);
if ((c[j]-c[i])%gcd!=0) continue;
ll tmp = m/gcd;
tmp=abs(tmp);
x=x%tmp*((c[j]-c[i])/gcd)%tmp;
//cout<<tmp<<"gg"<<endl;
x=(x%tmp+tmp)%tmp;
if (!x) x+=tmp;
//if (x>0) cout<<i<<" "<<j<<" "<<x<<endl;
if (x<=min(l[i],l[j])) return false;
}
return true;
}
ll ans=1;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&c[i],&p[i],&l[i]),ans=max(ans,c[i]);
for (ll i=ans;;i++)
{
if (check(i))
{
cout<<i;
return 0;
}
}
//cout<<-1<<endl;
return 0;
}
bzoj1407,洛谷2421 NOI2002荒岛野人的更多相关文章
- 【题解】洛谷P2421[NOI2002]荒岛野人 (Exgcd)
洛谷P2421:https://www.luogu.org/problemnew/show/P2421 思路 从洞的最大编号开始增大枚举答案 对于每一个枚举的ans要满足Ci+k*Pi≡Cj+k*Pj ...
- 洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)
题目背景 原 A-B数对(增强版)参见P1102 题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,… ...
- 洛谷 P2421 [NOI2002]荒岛野人
题目描述 又是一道扩欧的题. 要求一个最小的m使得 Ci+Pi*x≡Cj+Pj*x mod m(i!=j) 在x在第i个人和第j个人的有生之年无解. 也就是 (Pi-Pj)*x+m*y=Cj-Ci 在 ...
- P1516 青蛙的约会和P2421 [NOI2002]荒岛野人
洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...
- bzoj1407 / P2421 [NOI2002]荒岛野人(exgcd)
P2421 [NOI2002]荒岛野人 洞穴数不超过1e6 ---> 枚举 判断每个野人两两之间是否发生冲突:exgcd 假设有$m$个洞穴,某两人(设为1,2)在$t$时刻发生冲突 那么我们可 ...
- 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...
- [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)
Description 公元五八〇一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...
- 题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】
洛谷题目链接 bzoj题目链接 题目大意:给定\(n\)组\(C_i, P_i, L_i\),求最小的\(M\)使得对于任意的\(i,j (1 \leq i, j \leq n)\) \[C_i + ...
- 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)
题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...
随机推荐
- deepin-terminal改造风云再起
1. 创作背景 使用deepin-terminal的时候,我发现一些小的问题. 在论坛的帖子(https://bbs.deepin.org/zh/post/224502)也总结反馈了这些问题 终端标签 ...
- Windows内核-7-IRP和派遣函数
Windows内核-7-IRP和派遣函数 IRP以及派遣函数是Windows中非常重要的概念.IRP 是I/O Request Pocket的简称,意思是I/O操作的请求包,Windows中所有Use ...
- Sentry For React 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!
内容源于:https://docs.sentry.io/platforms/javascript/guides/react/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - ...
- Xshell破~~解和SecureCRT破~~解办法,亲测可行
解决办法很简单,那就是安装MobaXterm, 安装上即可使用,无需破击,免费,功能同样强大,不比xshell, SecureCRT功能差.它是集万千功能于一身的全能型终端神器. 听名字就不会太差,看 ...
- .net中使用JSON
在.NET使用JSON作为数据交换格式 ASP.NET中JSON的序列化和反序列化 三种方式: 使用System.Web.Script.Serialization.JavaScriptSerializ ...
- FileWriter文件文件字符输出流写入存储数据
1.FileWriter文件字符输出流-写入-存储数据 其中,流关闭之后再调用会报IOException; 其中,与文件字符输入流-写出-读取数据 和 字节输出流-写入-存储数据 不同的是,要先flu ...
- JVM-深入
目录 Java类的加载机制 什么是类的加载 类的生命周期 加载 连接 类加载器 类的加载 双亲委派模型 自定义类加载器 JVM内存结构 Java堆(Heap) 方法区(Method Area) 程序计 ...
- shell--目录通配符
符号 说明 ? 匹配任一字符 * 匹配一个或多个字符 [a-z0-9] 类似于正则表达式, 若想匹配?可用[?] [!a-z] 类似于正则表达式[^a-z], 不匹配中括号中的内容 {string1, ...
- 海量列式非关系数据库HBase 架构,shell与API
HBase的特点: 海量存储: 底层基于HDFS存储海量数据 列式存储:HBase表的数据是基于列族进行存储的,一个列族包含若干列 极易扩展:底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加Da ...
- 注释swap分区
grep "#" fstab |grep "swap" >/dev/null || sed -i 's/^.*swap/#&/g' fstab