zoukankan      html  css  js  c++  java
  • 【JZOJ 6550】Social Distancing

    题目大意:

    (n) 头牛和 (m) 个区间,要求每头牛都在区间内且每相邻的牛之间的间隔都不小于 (d),求 (d) 的最大可能值。

    正文:

    说到最大化最小值,一般情况下会想到用二分来解决这些问题。二分最关键的是 check 函数,在 check 函数中,我们可以通过枚举牛牛的位置来判断当前二分到的 (d) 是否符合题目中的条件:

    1. 在一个区间内,如果上一头牛可以和本牛的间隔达到 (d) 那么这一头牛就在这一区间。

    2. 在一个区间内,如果上一头牛不能和本牛的间隔达到 (d),那么这一头牛就要找一个可以和上一头牛达到 (d) 间隔的区间。

    如果不符合条件即 (d) 不可能是答案。

    代码:

    inline bool check(int x)
    {
    	int ans = L[1], now = 1;
    	for (int i = 2; i <= n; i++)
    	{
    		if(ans + x <= R[now])
    		{
    			ans += x;
    		}
    		else
    		{
    			while(ans + x > R[now] && now <= m)
    				++now;
    			if(ans + x > R[now]) return 0;
    			if(ans + x <= L[now])
    				ans = L[now];
    			else
    				ans += x;
    		}
    	}
    	return 1;
    }
    
  • 相关阅读:
    mysql查询版本
    mysql导出bug备注
    linux查找文件
    linux 编译式安装nginx
    linux文件校验
    linux 编译式安装apache
    网络层
    数据链路层
    物理层
    servlet过滤器
  • 原文地址:https://www.cnblogs.com/GJY-JURUO/p/12688377.html
Copyright © 2011-2022 走看看