求调玄关 WA on #5
查看原帖
求调玄关 WA on #5
775991
jianamisabina楼主2024/8/16 17:17

这里的判断用的是 P5656 第一篇题解的写法。

#include <iostream>
#include <algorithm>
#include <bitset>
#include <deque>
#include <cmath>
#define int long long

using namespace std;

const int N = 1e6 + 10;

int c[N],p[N],l[N];

int gcd(int a,int b){
	if(!b) return a;
	else return gcd(b,a % b);
}

void exgcd(int a,int b,int &x,int &y){
	if(a % b == 0){
		x = 0,y = 1;
	}else{
		exgcd(b,a % b,y,x);
		y -= a / b * x;
	}
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n,s = 0;cin >> n;
    for(int i = 1;i <= n;i ++){
		cin >> c[i] >> p[i] >> l[i];
		s = max(s,c[i]);
		c[i] --;
	}
	
	for(int m = s;m <= 1000000;m ++){
		int flag = 1;
		for(int i = 1;i <= n;i ++){
			for(int j = i + 1;j <= n;j ++){
				int a = p[i] - p[j],b = m;
				int cc = c[j] - c[i];
				//cout << a << ' ' << b << ' ' << cc << ' ';
				if(cc == 0 && a == 0) continue;
				else if(cc != 0 && a == 0){
					flag = 0;break;
				}else if(cc % gcd(a,b) != 0){
					//cout << -1 << '\n';
					continue;
				}else{
					if(a < 0) a = -a,cc = -cc;
					int x,y;
					exgcd(a,b,x,y);
					//cout << x << ' ' << y << '\n';
					//if(cc < 0) x = -x,y = -y,cc = -cc;
					//if(a < 0) a = -a,cc = -cc;
					//if(a < 0) x = -x,a = -a;
					int xx = x * cc / gcd(a,b);
					int dx = b / gcd(a,b);
					int mn = ceil((-xx + 1) * 1.0 / dx);
					if(xx + mn * dx <= min(l[i],l[j])){
						flag = 0;break;
					}
				}
			}
			if(!flag) break;
		}
		if(flag){
			cout << m;return 0;
		}
	}
    return 0;

}

2024/8/16 17:17
加载中...