poj1819Disks
题意:从左到右按顺序给你n个圆的半径,把左右两边想象成两堵墙的话,就是左右两边向里挤压,问哪些圆是对最后的宽度不影响。
刚开始理解错了,。。以为怎么放圆使宽度最小。。
这样就可以尽量使每个圆向左靠,找出当前圆与最左相切的圆,他们之间的那些圆肯定就是可以消除的,特判一下最左和最右就可以了。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 1010
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
struct point
{
double x,y,r;
point(double x=,double y=,double r =):x(x),y(y),r(r){}
}p[N];
int o[N];
bool f[N];
typedef point pointt;
pointt operator -(point a,point b)
{
return point(a.x-b.x,a.y-b.y);
}
int dcmp(double x)
{
if(fabs(x)<eps) return ;
return x<?-:;
}
double dis(point a)
{
return sqrt(a.x*a.x+a.y*a.y);
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
memset(f,,sizeof(f));
for(i = ; i <= n; i++)
scanf("%lf",&p[i].r);
p[] = point(p[].r,,p[].r);
p[].r = p[].x = ;
double rig;
for(i = ; i <= n; i++)
{
double maxz = ;
int x = i-;
for(j = i- ; j >= ; j--)
{
double d = sqrt((p[j].r+p[i].r)*(p[j].r+p[i].r)-(p[j].r-p[i].r)*(p[j].r-p[i].r))+p[j].x;
if(dcmp(d-maxz)>=)
{
maxz = max(maxz,d);
x = j;
}
}
if(dcmp(maxz-p[i].r)<=)
{
p[i].x = p[i].r;
for(j = ; j < i; j++)
f[j] = ;
continue;
}
p[i].x = maxz;
//cout<<i<<" "<<x<<" "<<maxz<<endl;
for(j = x+ ; j < i; j++)
f[j] = ;
}
int x = n;
for(i = ; i <= n ;i ++)
{
if(dcmp(p[i].r+p[i].x-rig)>)
{
rig = max(rig,p[i].r+p[i].x);
x = i;
}
}
for(i = x+ ; i <= n ;i++)
f[i] = ;
int g = ;
for(i = ; i <= n ;i++)
if(f[i])
o[++g] = i;
cout<<g<<endl;
for(i = ; i <= g ;i++)
cout<<o[i]<<endl;
}
return ;
}
poj1819Disks的更多相关文章
随机推荐
- Oracle存储过程返回游标实例详解
复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...
- 《深入浅出MFC:》
callback函数必须是static的,才能去除隐藏的this指针.
- fragment相关
1.鸿洋大神前两年写的,从最基础的开始详解.对常用的方法都做了精炼的总结,分上下两篇 http://blog.csdn.net/lmj623565791/article/details/3797096 ...
- 20150604_Andriod 窗体PopupWindow动画
参考地址: http://www.open-open.com/lib/view/open1378720752084.html http://www.jcodecraeer.com/a/anzhuoka ...
- 周赛-Integration of Polynomial 分类: 比赛 2015-08-02 08:40 10人阅读 评论(0) 收藏
Integration of Polynomial Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/O ...
- 迷之节约 分类: sdutOJ 最小生成树 2015-06-24 19:10 10人阅读 评论(0) 收藏
迷之节约 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 FF超级有钱,最近又买了n个(1 <= n <= 300)小岛,为 ...
- Rigidbody.position/rotation更新测试
Rigidbody.position/rotation主要提供在下一个物理步之前更新物理位置,一般用于SweepTest这样的接口 那么测试一下会不会修改掉transform.position的值 测 ...
- 性能tips
Latch 闩 锁的平级 采样时间不能太长,太频繁 一般情况下,性能图应该是一种趋势图,看的是趋势,不看某些单个点 在压测收集数据时,可能多种工具收集到的性能数据有少许差异,原因: 网络延迟,导致收集 ...
- asp.net OnInit、OnLoad、Page_Load、Page_Init父子页面执行顺序探究
本次探究page页面加载的时候,它们的执行顺序 BasePage public class BasePage : Page { public string BaseName { get; set; } ...
- css基本知识
WANGJUN59451 css基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HT ...