题解 | Load Balancing-牛客假日团队赛4L题

L-Load Balancing_牛客假日团队赛4

https://ac.nowcoder.com/acm/contest/947/L

题目描述

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.

输入描述:

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;
}

来源:甦萌
全部评论

相关推荐

有没有经济学家能告诉我,三年后中国的就业市场会不会好转?我在校招中拿到了一份9k+的offer,还是行业的龙头企业,心里其实不想再考研了。但又总是担心,万一读研后薪资更高,我会不会后悔呢?
Fyhyuky:三年后肯定不会啊,只会比现在更烂,你自己看看现在有没有什么增长点,电车都是国家补贴兜底才发展出来的,已经比较违背市场自然规律了,互联网更不用说了,国家强力打压,传统制造业转型失败,现在苟延残喘中
点赞 评论 收藏
分享
贪食滴🐶:你说熟悉扣篮的底层原理,有过隔扣职业球员的实战经验吗
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务