-
A - Xiongnu's Land
- UVALive - 7261
- 题意:给一些矩形给定矩形左上角的坐标给出长与宽求一个分割线,必须满足:
- 1、分割之后左边面积>=右边面积。
- 2、满足一的前提下尽可能缩小差距。
- 3、满足1,2的前提下线尽可能靠右。
- 直接求一下总面积然后从0-R遍历一遍求前缀和 找到符合3个条件的最优位置即可
-
#include<bits/stdc++.h> using namespace std; #define inf 1e16 #define maxn 1000050 #define ll long long ll sum[maxn],n,t,r; ll x,y,w,h,temp; int main() { scanf("%lld",&t); while(t--) { scanf("%lld%lld",&r,&n); memset(sum,0,sizeof(sum)); temp=0; for(int i=0; i<n; i++) { scanf("%lld%lld%lld%lld",&x,&y,&w,&h); temp+=w*h; for(int j=x+1; j<=x+w&&j<=r; j++) sum[j]+=h; } ll ans=inf,id,qyn,s=0; for(int j=0; j<=r; j++) { s+=sum[j]; qyn=temp-2*s; if(qyn<=0) { qyn=-qyn; if(qyn<=ans) { ans=qyn; id=j; } } } printf("%lld\n",id); } return 0; }