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的更多相关文章
随机推荐
- HDU 2665 && POJ 2104(主席树)
http://poj.org/problem?id=2104 对权值进行建树(这个时候树的叶子是数组b的有序数列),然后二分查找原数列中每个数在有序数列中的位置(即第几小),对每一个前缀[1,i]建一 ...
- 20145227《Java程序设计》第1次实验报告
20145227<Java程序设计>第1次实验报告 实验步骤与内容 命令行下Java程序开发 1.打开 cmd ,输入 mkdir 20145227 命令建立实验目录,然后输入 cd 20 ...
- java 类型转化
String 转int s="12345"; int i; 第一种方法:i=Integer.parseInt(s);;//直接使用静态方法,不会产生多余的对象,但会抛出异常 第二种 ...
- 【转】MYSQL入门学习之五:MYSQL的字符集
转载地址:http://www.2cto.com/database/201212/175541.html MySQL的字符集支持(Character Set Support)有两个方面:字符集(Cha ...
- mini-treeselect 不允许选父节点的写法
html里的控件事件:onbeforenodeselect = beforenodeselect js里: beforenodeselect : function(e){ //禁止选中父节点 ...
- maven 手动安装jar到仓库的命令
mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.6.0 -Dpackaging=jar -Dfile ...
- logo上线
- h264
H264--编码原理以及I帧B帧P帧--1 前言 ----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论 ...
- AWR报告-数据库概要信息(一)
Elapse time为两个Snap时间间隔,相当于取样时间差 DB Time : db time= cpu time + wait time(不包含空闲等待)(非后台进程) 说白了就是db tim ...
- c++类中的常量
C++类中的常量 由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现.const 数据成员的确是存在的,但其含义却不是我们所期望的.cons ...