码迷,mamicode.com
首页 > 其他好文 > 详细

丢瓶盖

时间:2017-10-22 01:33:22      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:sdi   org   bsp   span   include   ++   模拟   names   printf   

原题链接: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 }

 

丢瓶盖

标签:sdi   org   bsp   span   include   ++   模拟   names   printf   

原文地址:http://www.cnblogs.com/OIerShawnZhou/p/7707462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!