题目描述
Farmer John's N cows are each standing at distinct locations (x1,y1)…(xn,yn) on his two-dimensional farm (1≤N≤100, and the xi's and yi's are positive odd integers of size at most B). FJ wants to partition his field by building a long (effectively infinite-length) north-south fence with equation x=a (a will be an even integer, thus ensuring that he does not build the fence through the position of any cow). He also wants to build a long (effectively infinite-length) east-west fence with equation y=b, where b is an even integer. These two fences cross at the point (a,b), and together they partition his field into four regions.
FJ wants to choose a and b so that the cows appearing in the four resulting regions are reasonably "balanced", with no region containing too many cows. Letting M be the maximum number of cows appearing in one of the four regions, FJ wants to make M as small as possible. Please help him determine this smallest possible value for M.
For the first five test cases, B is guaranteed to be at most 100. In all test cases, B is guaranteed to be at most 1,000,000.
FJ wants to choose a and b so that the cows appearing in the four resulting regions are reasonably "balanced", with no region containing too many cows. Letting M be the maximum number of cows appearing in one of the four regions, FJ wants to make M as small as possible. Please help him determine this smallest possible value for M.
For the first five test cases, B is guaranteed to be at most 100. In all test cases, B is guaranteed to be at most 1,000,000.
输入描述:
The first line of the input contains two integers, N and B. The next n lines each contain the location of a single cow, specifying its x and y coordinates.
输出描述:
You should output the smallest possible value of M that FJ can achieve by positioning his fences optimally.
示例1
输入
7 10
7 3
5 5
9 7
3 1
7 7
5 3
9 1
输出
2
解答
暴力枚举
前缀和求出每次的最大值
这样复杂度就是
#include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<cstdlib> #include<cstring> #include<string> #include<map> #include<vector> #include<set> #include<queue> using namespace std; #define ll long long int mp[1005][105],sum[105][105],x[105],y[106],lisx[105],lisy[105]; int main() { std::ios::sync_with_stdio(false); int n,b,ans=0x3f3f3f3f; int i,mm,m,j,totx=0,toty=0; scanf("%d %d",&n,&b); for(i=1;i<=n;i++){ scanf("%d %d",&x[i],&y[i]); lisx[++totx]=x[i]; lisy[++toty]=y[i]; } sort(lisx+1,lisx+totx+1); sort(lisy+1,lisy+toty+1); totx=unique(lisx+1,lisx+totx+1)-lisx; toty=unique(lisy+1,lisy+toty+1)-lisy; for(i=1;i<=n;i++){ x[i]=lower_bound(lisx+1,lisx+totx+1,x[i])-lisx; y[i]=lower_bound(lisy+1,lisy+toty+1,y[i])-lisy; mp[x[i]][y[i]]=1; } mp[0][0]=0; for(i=1;i<=n+1;i++){ for(j=1;j<=n+1;j++){ mp[i][j]=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1]+mp[i][j]; } } for(i=2;i<=n+1;i++){ for(j=2;j<=n+1;j++){ int x=mp[i][j],y=mp[n][j]-x,p=mp[i][n]-x,q=n-x-y-p; int tmp=max(x,max(y,max(p,q))); ans=min(ans,tmp); } } printf("%d\n",ans); return 0; }
来源:甦萌