求调
  • 板块P1766 液体滴落
  • 楼主Lin_Z
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/14 15:24
  • 上次更新2025/1/14 19:22:04
查看原帖
求调
1252457
Lin_Z楼主2025/1/14 15:24

记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+100; 
int n,sx,sy=0x3f3f3f3f3f3f3f3f;
struct node{
	int x1,y1,x2,y2;
}L[N];
struct fenshu{
	int fenzi,fenmu;
};
struct fangcheng{
	fenshu k,b;
	int lx,rx;
}f[N];
signed main(){
	cin>>n>>sx;
	for(int i=1;i<=n;i++){
		int x1,x2,y1,y2;
		cin>>x1>>y1>>x2>>y2;
		L[i].x1 =x1,L[i].y1 =y1,L[i].x2 =x2,L[i].y2 =y2;
		if(L[i].y1 <L[i].y2 ){
			swap(L[i].x1 ,L[i].x2 ),swap(L[i].y1 ,L[i].y2 );
		}
		if((x1-x2)*(y1-y2)>0){
			if(x1-x2>0) f[i].k.fenmu =x1-x2,f[i].k.fenzi =y1-y2;
			if(x1-x2<0) f[i].k.fenmu =x2-x1,f[i].k.fenzi =y2-y1;
		}
		if((x1-x2)*(y1-y2)<0){
			if(x1-x2>0)f[i].k.fenmu =x2-x1,f[i].k.fenzi =y2-y1;
			if(x1-x2<0)f[i].k.fenmu =x1-x2,f[i].k.fenzi =y1-y2;	
		}
		f[i].b=f[i].k ,f[i].b.fenzi *=(-x1);
		f[i].b.fenzi +=(y1*f[i].b.fenmu );
		int aa=__gcd(f[i].b.fenzi,f[i].b.fenmu );
		f[i].b.fenmu /=aa,f[i].b.fenzi /=aa;
		aa=__gcd(f[i].k.fenzi,f[i].k.fenmu );
		f[i].k.fenmu /=aa,f[i].k.fenzi /=aa;
		f[i].lx =min(x1,x2);
		f[i].rx =max(x1,x2);
	}
	bool bb=1;
	while(bb){
		bb=0;
		int I;fenshu yy;
		yy.fenzi=-0x3f3f3f3f3f,yy.fenmu=1;
		for(int i=1;i<=n;i++){
			if(f[i].lx <=sx&&sx<=f[i].rx ){
				fenshu y;
				y.fenmu=max(f[i].b.fenmu ,f[i].k.fenmu ),y.fenzi=((max(f[i].b.fenmu ,f[i].k.fenmu )/f[i].b.fenmu )*f[i].b.fenzi )*(sx*max(f[i].b.fenmu ,f[i].k.fenmu ))+((max(f[i].b.fenmu ,f[i].k.fenmu )/f[i].k.fenmu )*f[i].k.fenzi );
				int aa=__gcd(y.fenzi,y.fenmu );
				y.fenmu /=aa,y.fenzi /=aa;
				if(y.fenzi<=sy*y.fenmu){
					bb=1;
					if(y.fenzi*yy.fenmu >=yy.fenzi *y.fenmu) yy=y,I=i;
				}
				else continue;
			}
			else continue;
		}
		sx=L[I].x2 ,sy=L[I].y2 ;
	}
	cout<<sx;
	return 0;
}
2025/1/14 15:24
加载中...