uestc 分割包围(二分)

二分最大距离,判断条件是每次要删除的点和要求的是否大小相等

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5
 6 const int MAXN = 50010;
 7 int d[MAXN];
 8 int x;
 9 int n, m;
10
11 int search(int l, int r){
12     int del; //记录消灭的数量
13     int mid;
14     while (r - l>1){
15         mid = (l + r) / 2; //进行二分
16         del = 0;
17         int i = 0;
18         for (int j = i + 1; j<n + 2; j++){
19             if (d[j] - d[i]<mid) //小于mid值就消灭
20                 del++;
21             else  //否则将i值增加,继续查找
22                 i = j;
23         }
24         if (del <= m)//当相等,则说明满足条件,小于则说明值偏小
25             l = mid;
26         else  //大于则折半缩小mid的值
27             r = mid;
28     }
29     return l;
30 }
31
32 int main(){
33     cin >> x >> n >> m;
34     int ans;
35     int l = x;
36     d[0] = 0; d[n + 1] = x;
37     for (int i = 1; i <= n; i++)
38         cin >> d[i];
39     sort(d, d + n + 2);  //对距离进行排序
40     ans = search(0, x);
41     cout << ans << endl;
42     return 0;
43 }
时间: 2024-10-12 08:27:46

uestc 分割包围(二分)的相关文章

UESTC 1170 红与蓝 计算几何、贪心、红蓝点对

D - EN TARO Artanis Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit Status Practice UESTC 1170 Description 平面上有N个红点和N个蓝点,求红点到蓝点的最近距离 Input 第一行为一个整数N  接下来第N行每行两个整数xi,yi,表示第i个红点的坐标 接下来第N行每行两个整数xi,yi,表示第i个蓝点的坐标(1      

UESTC 771 最大容积(前缀后缀和)

题目链接:http://acm.uestc.edu.cn/#/problem/show/771 最大容积 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 在 xx 轴的正整数坐标 1,2,?,N1,2,?,N 上分别竖立着一条线段,高度分别为 h1,h2,?,hNh1,h2,?,hN.这样只要我们任意选择两条线段 i,ji,j,再加上 xx 轴就能围

UESTC 883 方老师与两个串

CF原题 由题可知,n,m太大,无法开出dp[n][m]的数组. 观察发现s/e最大为300,也就是说,选用第一种操作的次数不会超过300. 于是定义dp[i][j],第一个串的前i个数,使用了j次第一种操作的时候,第二个串最少删了多少个数. 转移有两种情况: 1.当前位置不删,这时dp[i][j]=dp[i-1][j]: 2.当前位置删,此时就需要在B串中找和当前位置的数相同的数的位置,并且只有在找到的位置大于dp[i-1][j-1]的时候才是可行的.为了保证dp[i][j]最小,显然就是找大

2016 UESTC Training for Data Structures

2016 UESTC Training for Data Structures A - 卿学姐与公主 题意: 有两个操作一个是单点造成攻击,第二个是求区间最大值. 题解: 0.裸的线段树操作,不过zkw线段树显然更好. 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1000

UESTC 2014 Summer Training #16 Div.2

虽然被刷了还是要继续战斗下去嗯...就是基础不好,难度相对较大 A.SPOJ AMR10A 点是顺时针给出的,可以在图上画画(脑补也行),连线x-a,x-b(x为选定的一个点,比如第一个点),就把所求面积分成了四部分,a-b左边部分是较容易求出来的, 三角形面积是直接可求,另外两个多边形面积是可以预处理出来的(多个三角形面积和) 反正我是沒想出來...看題解也理解半天,多邊形面積转化为三角形面积和 嗯嗯 #include <iostream> #include <cstdio> #

hdu 4938 Seeing People 排序+二分查找

Seeing People Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 241    Accepted Submission(s): 61 Problem Description There are two kinds of people. If person i is the first kind of people, it

HDU4941Magical Forest (二分+链表优化)

Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 510 Accepted Submission(s): 239 Problem Description There is a forest can be seen as N * M grid. In this forest, there is some ma

UESTC 2014 Summer Training #6 Div.2

又是只过两水题,不过状态有些回升,也是差点一血. Problem A SPOJ AMR11A 显然的dp?就一抖就想到尝试从(R,C)推到(1,1),正着推的话,只能检查某一种解可不可行(就有人想出了二分+DP的神奇方法..刚卡过..不过上界是把所有龙加起来..不闲麻烦的话..可以按照贪心的方法先跑一个上界,就每一步选当前最优) 倒着推,龙的话,就加上,药水的话,减去?不够,和1取最大值:某一个点的f[i][j]就是两种策略取最小值: f[i][j] = min{ max(1, f[i+1][j

2.1 二分分类

本周学习神经网络编程的基础知识 构建神经网络,有些技巧是非常重要 神经网络的计算过程中,通常有一个正向的过程(正向传播步骤),接着会有一个反向步骤(反向传播步骤), 为什么神经网络的计算可以分为前向传播和反向传播两个分开的过程?本周课程通过使用logistic回归来阐述,以便于能够更好的理解, logistic回归是一个用于二分分类的算法 比如有一个二分分类问题的例子, 假如有一张图像作为输入是这样的,你想输出识别此图的标签,如果是猫,输出1,如果不是,则输出0 使用y来表示输出的结果标签, 来