博客园的话插链接链接都是凉的= =

题解

我理解成能不能看到这个圆,除了最后几个圆特殊以外都是等价的,然而我凉了,因为我把圆当成线段来处理,但是,有可能一个圆完全被遮住了,还有一个缝隙,就WA了
计算几何题这点最不好,WA了会想的第一件事就是垃圾OJ卡我精度,反复WA上几次才会知道,自己算法错了

那么首先每个圆的位置取决于能被左边的圆最远推到哪里,这个就是以两圆圆心距和竖直两条半径(是个梯形)算出来就行,能被推说明圆心距必然是半径之和,不断取max并同时记录是哪个圆推的它

最后取最后一个碰到某个圆的圆,并删除他们之间所有点,特判一下第一个碰到最远距离的圆pos[i] + r[i]的最大值所在的i并删除之后的圆

为什么我叙述那么混乱可能我太久没上语文课吧(手动再见)

代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <cstring>
#include <ctime>
#include <map>
#include <algorithm>
#include <cmath>
#define MAXN 1005
#define eps 1e-8
//#define ivorysi
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long int64;
typedef double db;
int N,tot,ans[MAXN],touch[MAXN];
db R[MAXN],pos[MAXN];
bool dcmp(db a,db b) {return fabs(a - b) < eps;
}
struct Point {db x,y;Point(){}Point(db _x,db _y) {x = _x;y = _y;}friend Point operator + (const Point &a,const Point &b) {return Point(a.x + b.x,a.y + b.y);}friend Point operator - (const Point &a,const Point &b) {return Point(a.x - b.x,a.y - b.y);}friend Point operator * (const Point &a,db d) {return Point(a.x * d,a.y * d);}friend Point operator / (const Point &a,db d) {return Point(a.x / d,a.y / d);}friend db operator * (const Point &a,const Point &b) {return a.x * b.y - a.y * b.x;}friend db dot(const Point &a,const Point &b) {return a.x * b.x + a.y * b.y;}db norm() {return sqrt(x * x + y * y);}
}P[MAXN];
struct Seg {Point a,b;db d;Seg(){}Seg(Point _a,Point _b) {a = _a;b = _b;d = atan2(b.y - a.y,b.x - a.x);}friend Point Cross_Point(const Seg &s,const Seg &t) {db S1 = (s.a - t.a) * (t.b - t.a);db S2 = (s.b - t.b) * (t.a - t.b);return s.a +  (s.b - s.a) * (S1 / (S1 + S2));}friend bool operator < (const Seg &s,const Seg &t) {return s.d < t.d;}
}S[MAXN];
inline db o(db x) {return x * x;}
void Solve() {//scanf("%d",&N);tot = 0;for(int i = 1 ; i <= N ; ++i) scanf("%lf",&R[i]);db L = 0.0;for(int i = 1 ; i <= N ; ++i) {pos[i] = R[i];touch[i] = 0;for(int j = 1 ; j < i ; ++j) {db x = pos[j] + sqrt(R[i] * R[j]) * 2;if(x > pos[i] + eps) {pos[i] = x;touch[i] = j;}}L = max(L,pos[i] + R[i]);}int last = 0;while(1) {if(dcmp(pos[last] + R[last],L)) {for(int i = last + 1 ; i <= N ; ++i) ans[++tot] = i;break;}int v = 0;for(int i = last + 1 ; i <= N ; ++i) {if(touch[i] == last) v = i;} for(int i = last + 1 ; i < v ; ++i) ans[++tot] = i;last = v;}   printf("%d\n",tot);for(int i = 1 ; i <= tot ; ++i) {printf("%d\n",ans[i]);}
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifwhile(scanf("%d",&N) != EOF && N) {Solve();}return 0;
}

转载于:https://www.cnblogs.com/ivorysi/p/9021566.html

【POJ】1819.Disks相关推荐

  1. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  2. 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)

    [POJ]2676-Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25200 Accepted: 11782 Sp ...

  3. 【POJ】 1014 Dividing(多重背包,优化)

    [POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...

  4. 【POJ】1456 supermarket

    [POJ]1456 supermarket 给定 n 件物品,第 i件物品有如下信息: 卖出去可以得到pi的收益. 过期时间为di ,过了过期时间就不能再卖出去. 卖掉一件物品要用 1 的时间,求最大 ...

  5. 【POJ】3268 Silver Cow Party (将有向图的边反转)

    问题链接:http://poj.org/problem?id=3268 [问题描述] One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  6. 【POJ】1308 Is It A Tree?((并查集 + set)or (map))

    http://poj.org/problem?id=1308 这个题数组开到200就可以了,但题目中貌似没有说呢? 读入每一对顶点,看看他们是否在同一个集合中,如果是的话,肯定成环,不是一棵树. 用s ...

  7. 【POJ】3617 Best Cow Line (字典序 字符串)

    http://poj.org/problem?id=3617 给定长度为N(1≤N≤2000)的字符串S,要构造一个长度为N的字符串T.期初,T是一个空串,随后反复进行下列任意操作. 从S的头部删除一 ...

  8. 【POJ】2377 Bad Cowtractors(最大生成树)

    简单题,模板题 求解最大生成树,提交一直WA,感觉没有什么问题啊,就是在求解最小生成树的模板基础上稍加修改即可,后来发现在输出a,b,c给map二维数组的时候还必须有判断条件,略为有点坑,因为之前做的 ...

  9. 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)

    http://poj.org/problem?id=2828 一开始敲了个splay,直接模拟. tle了.. 常数太大.. 好吧,说是用线段树.. 而且思想很拽.. (貌似很久以前写过貌似的,,) ...

最新文章

  1. SpringBoot返回枚举对象中的指定属性
  2. BZOJ3945 : 无聊的邮递员
  3. 智能音箱 之 麦克风参数介绍
  4. 【Modern OpenGL】纹理 Textures
  5. 【python】面向对象类、对象的介绍
  6. Spring Boot-------JPA——EntityManager构建通用DAO
  7. matlab repmat 函数的使用
  8. Python+Selenium+Edge浏览器安装与简单运行(1/2)
  9. 成年人的21个规则,必须知道
  10. switch删除用户显示无法连接服务器,switch无法连接互联网怎么办 NS无法联机联网详细解决办法...
  11. Python 语言发展历史
  12. 快手也抢先字节出手了…
  13. Python必会的单元测试框架 —— unittest
  14. OSINT和被动侦察
  15. 一文读懂三种并发控制机制(封锁、时间戳、有效性确认,大量例子+证明)
  16. 计算机科学与技术的应用及优势,解读计算机科学与技术的应用及发展趋向.docx...
  17. YTU 1607: 字符棱形 (图形打印)
  18. 一位清华计算机专业的学生怎么看LINUX与WINDOWS
  19. 【转】Apache Doris介绍
  20. 64位 atol c linux_Linux_C函数参考

热门文章

  1. 二进制有符号数补码计算器
  2. 算法作业 (三)——— 装箱问题
  3. 手机ZTE中兴U802 U807手机解锁图案忘了 如何处理
  4. 教你编写一个手势解锁控件
  5. Drate(小虫) 经典经历
  6. android listview 宽度,Android ListView项目没有填充宽度
  7. 基于docker安装的rabbitmq如何安装rabbitmq_delayed_message_exchange-3.8.0.ez插件
  8. 深度linux安装宝塔,Linux 安装宝塔
  9. 海盗喝啤酒问题Java解法
  10. 翻译 Albert Julian Mayer 关于虚拟纹理的论文(2. 相关工作)