其实答案远不到1e6

所以可以枚举!

设答案是m

那\(i,j\)的相遇就可以表示成\(P_ix+C_i=P_jx+C_j+ym\)

移向就是\((P_i-P_j)x-ym=C_j-C_i\)

套扩展欧几里得定理

如果\(C_j-C_i\mod gcd\ !=0\)说明不会相遇

否则的话求一下第一次相遇时间,如果大于一个的寿命也不会相遇


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M 1000010
using namespace std; int n,m,k,c[M],l[M],p[M],maxx,x,y; int exgcd(int a,int b,int &x,int &y)
{
if(!b) {x=1, y=0; return a;}
int tmp=exgcd(b,a%b,y,x);
y-=a/b*x; return tmp;
} bool check(int k)
{
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
int a=p[i]-p[j], b=c[j]-c[i];
if(a<0) a=-a, b=-b;
int g=exgcd(a,k,x,y);
if(b%g) continue;
x*=b/g; int f=k/g;
x=(x%f+f)%f; if(!x) x=f;
if(x<=min(l[i],l[j])) return 0;
}
return 1;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d%d",&c[i],&p[i],&l[i]), m=max(m,c[i]);
for(;;m++) if(check(m)) break;
printf("%d",m);
}

最新文章

  1. 怎样才能自学好Java?
  2. npm更新到最新版本的方法
  3. 每天一个linux命令(45):free 命令
  4. 关于中文字体的设置说明(font:12px/1.5 tahoma,arial,\5b8b\4f53)
  5. RSA算法基础详解
  6. TCP/IP协议学习(四) 协议概述
  7. 在表单(input)中id和name的区别
  8. [Everyday Mathematics]20150210
  9. 【mysql的编程专题⑥】视图
  10. LintCode 55 比较字符串
  11. sparklyr包:实现Spark与R的接口
  12. selenium,html高宽设置成了0,会影响元素可见性,怎么手动修改某个元素的高宽?
  13. 算法题:A除以B
  14. 带你深入理解STL之Stack和Queue
  15. 《HelloGitHub》第 32 期
  16. 9、vuex快速上手
  17. Java_Mybatis_注解代理写法
  18. Linux系统下yum源配置(Centos 6)
  19. mongodb oplog与数据同步
  20. 14 printf输出格式及栈空间分配

热门文章

  1. Redis之集群环境搭建
  2. MongoDB框架Jongo的使用介绍
  3. C++ 重载运算符简单举例
  4. C#关闭子窗口而不释放子窗口对象的问题解决
  5. webpack4 系列教程(三): 多页面解决方案--提取公共代码
  6. 初学HTML-7
  7. idea not found for the web module
  8. 【读书笔记】iOS-分类与协议
  9. vue-cli脚手架之webpack.prod.conf.js
  10. vue.js的安装