社区讨论

TLE 90pts 求调

P2421[NOI2002] 荒岛野人参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo7u8r5m
此快照首次捕获于
2023/10/27 07:51
2 年前
此快照最后确认于
2023/10/27 07:51
2 年前
查看原帖
T了#5(寿命全是1000000)的点
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,c[20],p[20],l[20];
int rr,ll,lm;
bool op;
int exgcd(int a,int b,int &x,int &y){
	if(!b){
		x=1,y=0;
		return a;
	}
	int gcd=exgcd(b,a%b,x,y);
	int t=x;
	x=y;
	y=t-(a/b)*y;
	return gcd;
}
bool opp(int x,int i,int j){
	if(x<=min(l[i],l[j])){
		op=0;
		return 0;
	}
	else{
		op=1;
		return 1;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>p[i]>>l[i];
		m=max(m,c[i]);
		lm=max(lm,l[i]);
	}
	if(n==1){
		cout<<n;
		return 0;
	}
	while(1){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
			if(i==j) continue;
			int a=p[i]-p[j],b=m,cc=c[j]-c[i];
			int x,y;
			int gcd=exgcd(a,b,x,y);
			if(cc%gcd!=0) continue;
			int ans=(x*cc/gcd)%(b/gcd);
			if(ans<0) ans+=abs(b/gcd);
			if(!opp(ans,i,j)) break;
			}
			if(!op) break;
		}
		if(op){
			cout<<m;
			return 0;
		}
		m++;
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...