1 条题解

  • 0
    @ 2024-7-31 17:28:35

    二分答案

    首先数据不是有序的,先排序sort(a + 1, a + 1 + n)

    可以知道答案的左边界是:11 ,答案的右边界是:ana1a_n-a_1

    接下来二分,checkcheck 函数。

    bool check(int x)
    {
    	int cnt = 1, last = a[1]; // 上一次放兔子的位置
    	for (int i = 2; i <= n; i++)
    	{
    		if (a[i] - last >= x)
    		{
    			cnt++;
    			last = a[i];
    		}
    	}
    	return cnt >= m; // true -> l = mid + 1; false -> r = mid - 1;
    }
    ...
    while (l <= r)
    {
    	int mid = (long long)(l + r) / 2;
    	if (check(mid)) l = mid + 1;
    	else r = mid - 1;
    }
    cout << r << endl;
    
    • 1

    信息

    ID
    3
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    26
    已通过
    7
    上传者