博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3622 Bomb Game(2-SAT + 二分)
阅读量:4073 次
发布时间:2019-05-25

本文共 1180 字,大约阅读时间需要 3 分钟。

【题目链接】

【题目大意】

要在坐标轴上放N次炸弹,每次可以选择两个位置中的一个位置放置,每个炸弹都可以控制它的爆炸范围(以放置位置为圆心的半径为r的圆圈),问半径最大可以多少,使得任意两个炸弹的爆炸范围都不重合。

【思路】

类似与 , 但是判断重合的方法容易多了,果断1Y

注意精度问题。

【代码】

#include
#include
#include
#include
#include
#include
#define SQ(x) ((x)*(x))using namespace std;const int MAXN = 110;const int VN = MAXN*2;const int EN = VN*VN*2;const int INF = 0x3f3f3f3f;const double eps = 1e-9;int n;vector
g[VN];struct Node{ int x, y; void input(){scanf("%d%d",&x,&y);}}arr[MAXN][2];void init(){ for(int i=0; i<2*n; ++i) g[i].clear();}void addEdge(int u, int v){ g[u].push_back(v);}class Two_Sat{public: bool check(){ scc(); for(int i=0; i
eps) { //上, 上 addEdge(i, j+n); addEdge(j, i+n); } if(2*r - getDist(arr[i][0], arr[j][1]) > eps) { //上, 下 addEdge(i, j); addEdge(j+n, i+n); } if(2*r - getDist(arr[i][1], arr[j][0]) > eps){ // 下,上 addEdge(i+n, j+n); addEdge(j, i); } if(2*r - getDist(arr[i][1], arr[j][1]) > eps){ // 下,下 addEdge(i+n, j); addEdge(j+n, i); } } }}int main(){ while(~scanf("%d", &n)){ for(int i=0; i
eps){ m = (r+l)/2.0; // 建图 buildGraph(m); if(sat.check()){ l = m+eps; ans = m; } else r=m; } printf("%.2f\n", ans); } return 0;}

转载地址:http://ppzni.baihongyu.com/

你可能感兴趣的文章
PostgreSQL查询优化器详解之逻辑优化篇
查看>>
STM32中assert_param的使用
查看>>
C语言中的 (void*)0 与 (void)0
查看>>
vu 是什么
查看>>
io口的作用
查看>>
IO口的作用
查看>>
UIView的使用setNeedsDisplay
查看>>
归档与解归档
查看>>
Window
查看>>
为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
查看>>
字符串的截取
查看>>
2. Add Two Numbers
查看>>
17. Letter Combinations of a Phone Number (DFS, String)
查看>>
93. Restore IP Addresses (DFS, String)
查看>>
19. Remove Nth Node From End of List (双指针)
查看>>
49. Group Anagrams (String, Map)
查看>>
139. Word Break (DP)
查看>>
Tensorflow入门资料
查看>>
剑指_用两个栈实现队列
查看>>
剑指_顺时针打印矩阵
查看>>