丢瓶盖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了丢瓶盖相关的知识,希望对你有一定的参考价值。

原题链接:https://www.luogu.org/problem/show?pid=1316#sub

第三题。

这题和跳石头很像啊。相当于从A块石头中移走B块使最短跳跃距离最长。

我们二分跳跃距离然后代入模拟,其余的思路和跳石头就一样了,看代码也能看出来。

参考代码:

 1 #include <algorithm>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #define maxn 1000005
 6 using namespace std;
 7 int n,m,a[maxn];
 8 inline int read(){
 9     int num = 0;
10     char c;
11     bool flag = false;
12     while ((c = getchar()) ==   || c == \n || c == \r);
13     if (c == -)
14         flag = true;
15     else
16         num = c - 0;
17     while (isdigit(c = getchar()))
18         num = num * 10 + c - 0;
19     return (flag ? -1 : 1) * num;
20 }
21 bool check(int now){
22     int last=1,ans=1;
23     for(int i=2;i<=n;i++){
24         if(a[i]-a[last]>=now){
25             ans++;
26             last=i;
27         }
28     }
29     if (ans < m) 
30         return false;
31     else
32         return true;
33 }
34 
35 int main(){
36     n = read();m = read();
37     for(int i=1;i<=n;i++)
38         a[i] = read();
39 
40     sort(a+1,a+n+1);
41     int l=1;
42     int r=a[n]-a[1];
43     while(l <= r){
44         int mid = (l+r) >> 1;
45         if(check(mid)) 
46             l=mid+1;
47         else 
48             r=mid-1;
49     }
50     printf("%d\n",l-1);
51     return 0;
52 }

 

以上是关于丢瓶盖的主要内容,如果未能解决你的问题,请参考以下文章

[luoguP1316] 丢瓶盖(二分答案)

洛谷P1316 丢瓶盖

洛谷——P1316 丢瓶盖

洛谷 P1316 丢瓶盖 题解

洛谷P1316 丢瓶盖 二分答案

P1316 丢瓶盖(二分+贪心)