思路:

数据范围不大..

那我们就枚举M好了..

再两两判断一下有没有冲突

怎么判断呢?

exgcd!!!

p[i]*k+c[i]=p[j]*k+c[j]  (mod m)

(p[j]-p[i])*k=c[i]-c[j](mod m)

(p[j]-p[i])*k+m*b=c[i]-c[j]

但是 gcd(c[i]-c[j],p[j]-p[i])不一定是1

我们就先搞出来 p[j]-p[i]和m 的gcd 记为tt

如果 c[i]-c[j]不是tt的倍数  ->无解

然后 就成了这个样子

(p[j]-p[i])*k+m*b=tt

两边同时乘一个c[i]-c[j]/tt

求k的时候 mod的数 是(m/tt)

最后再判一判

复杂度是O(n2logn*M)(虽然复杂度不对 但是能卡过去   donno why)

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,c[],p[],l[],mx;
int exgcd(int a,int b,int &x,int &y){
if(!b){x=,y=;return a;}
int tmp=exgcd(b,a%b,x,y),tt=x;
x=y;y=tt-a/b*y;return tmp;
}
bool solve(int m){
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
int k,b,t2=c[i]-c[j],tt=exgcd(((p[j]-p[i])%m+m)%m,m,k,b);
if(t2%tt)continue;
int tmp=t2/tt;
k=((k*tmp)%(m/tt)+(m/tt))%(m/tt);
if(k<=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]),mx=max(mx,c[i]);
for(int i=mx;;i++)if(solve(i)){printf("%d\n",i);return ;}
}

最新文章

  1. favicon.ico 404的问题(title栏前面的图标)
  2. Android开发:在布局里移动ImageView控件
  3. SPSS数据分析—聚类分析
  4. angular2开发01
  5. 译:Google的大规模集群管理工具Borg(一)------ 用户视角的Borg特性
  6. Matlab数字信号处理
  7. kafka常用的操作命令
  8. malloc、calloc、realloc的区别
  9. 校友信息管理&amp;SNS互动平台之前言、目录及说明
  10. 指针与数组、大小端之 printf(&quot;%x,%x,%x\n&quot;,*(a+1),ptr1[-1],*ptr2);
  11. 基于visual Studio2013解决面试题之0707最小元素
  12. 开源:Sagit.Framework For IOS 开发框架
  13. epoll通俗讲解
  14. python 第一课 helloworld
  15. nginx 错误502 upstream sent too big header while reading response header from upstream
  16. js canvas游戏初级demo-躲避障碍物
  17. 使用vmimeNET解析账单邮件
  18. java注释讲解
  19. Spring Security 用户授权原理分析
  20. js选择排序

热门文章

  1. php第十八节课
  2. Luogu P1892 [BOI2003]团伙
  3. Coefficient Computation (大整数、Java解决)
  4. ELK6 收集不同来源的日志并做区分
  5. linux中的umask命令
  6. 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum
  7. kendo Grid Unexpected number错误
  8. [bzoj2599][IOI2011]Race_树上点分治
  9. SSM(spring mvc+spring+mybatis)学习路径——2-1、spring MVC入门
  10. MySQL终端(Terminal)命令基本操作(转)