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的更多相关文章
随机推荐
- 微信支付 APP 支付方式的服务器端处理程序
对于微信的APP的支付,客户服务说只能通过微信开放平台申请.后来在公众帐号确实发现了证据: 微信支付在申请的时候就比较严(麻烦),对服务类的一些支付,本来商品就是虚拟的,所以需要将商品描述的比较详细 ...
- [C++]C++标准里 string和wstring
typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型, ...
- YTU 3020: 对称矩阵(数组)
3020: 对称矩阵(数组) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 2 题目描述 已知A和B为两个n*n阶的对称矩阵,输入时,对称矩阵只输入下三角行元素,存入一维数 ...
- Proud Merchants
Proud Merchants Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) To ...
- isp和3a的联系与区别是什么?
Willis Zen上善若水 2 人赞同 你说的这个问题,不是很多人能够回答的,我也只能把我知道的告诉你.isp 是image signal processing,用于图像处理,比如gamma调整,d ...
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
1.Surface Surface extends Objectimplements Parcelable java.lang.Object ↳ android.view.Surface Cla ...
- Ajax 用法
Ajax 用法 var total=100; var orderName='sssss'; var orderDescrib='dddd ...
- MVC2.0==>MVC3.0
总结出如下4个MVC3.0和2.0的重要区别. 1. @ 符号在 View 页面中的用法: C#代码以 @符号开头,例如 1 <h2>Name: @Model.Name</h2> ...
- shell与kernel的理解 转载
Shell 的英文释义是外壳,与 kernel 内核名词遥相呼应,一外一内,一壳一核.内核就像瑞士银行的金库,存放着客户的黄金等众多的(硬件)资产,闲杂人等(包括客户)当然是严格禁止入内的,而作为客户 ...
- swift + jj实践
1,UIButton里面的字体和图片左对齐 button.imageEdgeInsets = UIEdgeInsetsMake(0,180/2,0.0,320/2) let btnRect = but ...