博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p2421 荒岛野人
阅读量:7246 次
发布时间:2019-06-29

本文共 1305 字,大约阅读时间需要 4 分钟。

题目

克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。每个野人i有一个寿命值Li,即生存的年数。

下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。

奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇。他们想知道,至少有多少个山洞,才能维持岛上的和平呢?

输入格式:

第1行为一个整数N(1<=N<=15),即野人的数目。

第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。

输出格式:仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。

分析

暴力枚举m的大小,然后判断此时每对野人是否会相遇,如果他们永远不会相遇或相遇时间大于两野人中寿命最短的所活时间则不会相遇,具体求解过程同青蛙的约会。

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;int c[200],p[200],l[200],n;inline int gcd(int a,int b){ return a%b==0?b:gcd(b,a%b);}inline void exgcd(int a,int b,int &x,int &y){ if(b==0){x=1,y=0;return;}exgcd(b,a%b,x,y); int t=x;x=y;y=t-(a/b)*y;return;}inline bool go(int i,int j,int b){ int a=p[i]-p[j],f=c[j]-c[i],g=gcd(a,b),x,y; if(f%g==0){ a/=g,b/=g,f/=g; exgcd(a,b,x,y); b=abs(b); x=(x%b*f%b+b)%b; if(x<=min(l[i],l[j]))return 0; } return 1;}inline bool check(int m){ int i,j,k; for(i=1;i

转载于:https://www.cnblogs.com/yzxverygood/p/9235727.html

你可能感兴趣的文章
什么是Docker?为什么要使用Docker【转】
查看>>
Unix-Linux 编程实践教程 第五章 小结
查看>>
asp.net 界面中应用ajax返回值
查看>>
MySQL数据导入ElasticSearch
查看>>
idea同时部署两个项目时启动报错
查看>>
从一道面试题来认识java类加载时机与过程
查看>>
读Zepto源码之属性操作
查看>>
php 源码编译安装
查看>>
java值传递
查看>>
解释Eclipse下Tomcat项目部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)...
查看>>
40个Java多线程问题总结
查看>>
DBImport v3.5 中文版发布:数据库定时同步及文档生成工具(IT人员必备)
查看>>
020-添加用户
查看>>
023-手动增加swap分区
查看>>
20.27 分发系统介绍
查看>>
Java进阶(一)使用new Date()和System.currentTimeMillis()获取当前时间戳
查看>>
推荐引擎
查看>>
Java字符串常亮池
查看>>
如何学习区块链
查看>>
华为加班有多可怕?
查看>>