2020牛客寒假算法基础集训营5 部分题解(BDEH)
B: 牛牛战队的比赛地(二分做法)
题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小。
思路:
我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆覆盖问题。有关于最大值最小此类问题,我们第一个想到的就应该是二分了,关键在于二分半径后如何check呢?
首先我们需要明白这样一个前提,也是解题的关键点:一个半径为R的圆,我们任意在圆上或圆内找一个点,也做半径为R的圆,那么这个圆一定会包含之前那个圆的圆心。
明白了这个,问题就easy了,我们将二分得到的半径R,把n个点都拿来做这样半径为R的圆,与x轴相交的部分,说明圆心可能落在这一范围内,然后我们只要看这些区域是否产生矛盾就好了。比如点1与x轴相交范围为[3,6],点2为[7,10],没有相交的部分,显然答案矛盾,即不存在半径为R的圆可以包含全部点。
#include <bits/stdc++.h> #define x first #define y second #define d double using namespace std; ; int n; pair<d, d> p[N]; bool check(d o) { d l, mi = -1e18, ma = 1e18; ; i <= n; i++) { if (o < fabs(p[i].y)) return false; l = sqrt(o - p[i].y) * sqrt(o + p[i].y); ///等价于sqrt(o*o-p[i].y*p[i].y) mi = max(mi, p[i].x - l); ma = min(ma, p[i].x + l); } return mi <= ma; ///判断最大的左端点<=最小的右端点即可 } int main() { ios_base::sync_with_stdio(false); cin >> n; ; i <= n; i++) cin >> p[i].x >> p[i].y; d l = , r = 1e18, mid; ; while (t--) { mid = (l + r) / 2.0; if (check(mid)) r = mid; else l = mid; } cout << ) << r; ; }
D:牛牛与牛妹的约会 (贪心)
题解:我们先明确何时开根号走会更优,即:x - x^(1/3) > 1,解得x>2.3247179,因此我们贪心的按开根号走直到x<=2.3247179,同时维护最小值即可。
#include <bits/stdc++.h> using namespace std; double cal(double x) { , r = x, mid; ; while (q--) { mid = (l + r) * 0.5; if (mid * mid * mid >= x) r = mid; else l = mid; } return r; } int main() { int t; while (~scanf("%d", &t)) { while (t--) { double a, b; scanf("%lf%lf", &a, &b); , ans = fabs(a - b); ) { while (a >= 2.3247179) { now += 1.0; a = cal(a); ans = min(ans, fabs(a - b) + now); } } ) { a = -a; b = -b; while (a >= 2.3247179) { now += 1.0; a = cal(a); ans = min(ans, fabs(a - b) + now); } } printf("%.9f\n", ans); } } ; }
E: Enjoy the game (博弈)
题解:多写几个就看出来了,是二次幂后手胜,否则先手胜。
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; ))) ///判断是否为2次幂 cout << "Alice"; else cout << "Bob"; ; }
H:Hash (进制转化)
题解:
x%mod=p 不难得到 (x+mod)%mod=p
所以字符串加个mod就可以了,判一下长度是否还为6即可。
#include <bits/stdc++.h> using namespace std; ], a[]; int mod, k, x; int main() { while (~scanf("%s%d", s, &mod)) { memset(a, , sizeof(a)); k = x = ; ; i < ; i++) x = x * + s[i] - 'a'; ///转为10进制 x += mod; while (x) ///转回26进制 { a[++k] = x % ; x /= ; } ) { ) ///长度不够6补a即可 k++; ; i--) printf("%c", a[i] + 'a'); } else printf("-1"); puts(""); } ; }
2020牛客寒假算法基础集训营5 部分题解(BDEH)的更多相关文章
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- 2020牛客寒假算法基础集训营4-F树上博弈
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...
- 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...
- 2020牛客寒假算法基础集训营1 F-maki和tree
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 2020牛客寒假算法基础集训营5 G街机争霸
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...
- 2020牛客寒假算法基础集训营4 D:子段异或
D : 子段异或 考察点 : 位运算,前缀和,异或的性质和应用 坑点 : 0 - L 的异或值是 0 的话也是一个区间 相同的值可能有多个,那么这时候区间就会有多个(x * (x + 1) / 2) ...
- 2020牛客寒假算法基础集训营6 I.导航系统 (最小生成树)
https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法, ...
- 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...
随机推荐
- C++ Primer Plus 6 笔记(3)
第5章 1.cout在显示bool值之前将它们转换为int,但cout.setf(ios:: boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0 2. ...
- Verilog有符号整型数(signed int)比大小
本文参考了https://blog.csdn.net/wenxinwukui234/article/details/42119265/ 关于2进制补码的思考和讨论. ================= ...
- 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类
interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...
- POJ 1979 Red and Black 四方向棋盘搜索
Red and Black Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 50913 Accepted: 27001 D ...
- 关于C++中vector<vector<int> >的使用
1.定义 vector<vector<int>> A;//错误的定义方式 vector<vector<int> > A;//正确的定义方式 2.插入元素 ...
- HiBench成长笔记——(2) CentOS部署安装HiBench
安装Scala 使用spark-shell命令进入shell模式,查看spark版本和Scala版本: 下载Scala2.10.5 wget https://downloads.lightbend.c ...
- python isinstance()判断数据类型
举例: d = (1,2,3) print(isinstance(d,int)) #False print(isinstance(d,tuple)) #True print(isinstance(d, ...
- openCV 3.4 windows下的配置说明
链接: https://pan.baidu.com/s/1dkS_G8ZSBD8EnhYeEFZxhQ 密码: xu99 (从官网下的, 但360会提示有毒, 哈哈哈) 运行exe, 解压openCV ...
- vue的MVVM
Vue的相关知识有 字符串模板 MVVM 虚拟dom和domdiff,查看下一篇笔记 字符串模板 function render(template, data) { const reg = /\{\{ ...
- 循环指令 LOOP
循环程序: 如果需要重复执行若干次同样任务.用循环执行 循环指令: LOOP <跳转标号> 用累加器的低字做循环计数器 每次执行LOOP 指令的时候,累加器的低字减去1 若减去后 非零 , ...