• POJ-2456.Aggressivecows.(二分求解最大化最小值)


      本题大意:在坐标轴上有n个点,现在打算在这n个点上建立c个牛棚,由于牛对厂主的分配方式表示很不满意,它很暴躁,所以它会攻击离它很近的牛来获得快感,这件事让厂主大大知道了,他怎么可能容忍?所以他决定有策略的对牛进行分配仓库,他想让每头牛之间的距离尽可能远,现在他来求助你......

      本题思路:本题一看就是二分啦嘻嘻嘻,有上界有下界求最优你敢信?演员......

      回归正题...我们可以选择最大值作为上界,选择最小值作为下界,接着二分呀,我们枚举的当然是我们事先假定的每个牛之间的最小距离x(也就是说牛舍之间的距离大于x就可以建立牛舍了),那么问题就一目了然了,我们只需要看在给定的所有点中,是否存在至少c个点满足他们之间的距离都大于等于x呢满足就是true了,然后就是二分思想改变这个最小距离x的取值,如果成立则说明需要扩大范围,如果不成立则需要缩小范围,当然是二分思想扩大,然后取那个最优的就行了呀,也就是距离最大的那个呀。哦对了,有个问题没说清楚,所以为什么是在可行的时候我们反而扩大范围?因为我们是在数组内寻找满足上面我们说的条件的值,所以C(x)当然是越大越好。

      那么何时我们结束二分呢?我们可以考虑到,所有牛舍的距离都不会重合,并且不能让他们相邻(会干架),所以我们判断当L - R > 1不成立时就结束二分。

      嘤嘤嘤,所以我们上面讲的那个判断条件到底搞懂了没?重要的就是这一环了嘤嘤嘤,咱也不知道,咱也不敢问,不会的童鞋再回去看一下呀。

    参考代码(???是我讲的不够清楚么还是???自己实现嘻嘻嘻):

      

     1 #include <cstdio>
     2 #include <algorithm>
     3 #define mid ((l + r)) / 2
     4 using namespace std;
     5 
     6 const int maxn = 100000 + 5, INF = 1e9;
     7 int value[maxn];
     8 int n, c;
     9 
    10 bool check(int x) {
    11     int last = 0;
    12     for(int i = 1; i < c; i ++) {
    13         int cur = last + 1;
    14         while(cur < n && value[cur] - value[last] < x) cur ++;
    15         if(cur == n) return false;
    16         last = cur;
    17     }
    18     return true;
    19 }
    20 
    21 int main() {
    22     scanf("%d %d", &n, &c);
    23     for(int i = 0; i < n; i ++)
    24         scanf("%d", &value[i]);
    25     sort(value, value + n);
    26     int l = 0, r = INF;
    27     while(r - l > 1) {
    28         if(check(mid))
    29             l = mid;
    30         else 
    31             r = mid;
    32     }
    33     printf("%d
    ", l);
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    【转】算命称骨
    为WinForms程序添加Form级快捷键的最简单方式
    Flex4中Datagrid垂直滚动使combobox&dropdownlist数据消失(已解决)
    Flex & form小技巧
    [转]Android开发之旅:环境搭建及HelloWorld
    [SQL2005]安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    [转]Flex 中的皮肤
    天哪,Flex有没有阻塞方式啊?
    [资料库]Flash特效站点(带源码)
    开始学习JAVA
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10920621.html
Copyright © 2020-2023  润新知