hdu 3347 坐标系扩大根号2倍+暴力
2015-09-22 20:50
417 查看
#include<iostream> #include<stdio.h> #include<string.h> #include<string> #include<stdlib.h> #include<cmath> #include<queue> #include<algorithm> using namespace std; #define rd(x) scanf("%d",&x) #define rdd(x,y) scanf("%d%d",&x,&y) #define rddd(x,y,z) scanf("%d%d%d",&x,&y,&z) #define rds(s) scanf("%s",s) #define rep(i,n) for(int i=0;i<n;i++) #define LL long long const int N = 100; const int M=5e5+10; const int inf=1e9; const double eps=1e-5; const int MOD=1e9+7; int n,m; struct Point{ double x,y; int id; Point(){ } Point(double _x,double _y){ x=_x;y=_y; } bool operator < (const Point&a) const{ if(y==a.y) return x<a.x; return y<a.y; } }; Point p1,p2,p3,p4; struct Seg{ Point s,e; Seg(){} Seg(Point _s,Point _e){ s=_s; e=_e; } Seg(double x,double y,double xx,double yy){ s.x=x;s.y=y; e.x=xx;e.y=yy; } }; double cross(Point a,Point b,Point c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x); } double dist(Point a,Point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int sgn(double x){ return x<-eps?-1:x<eps?0:1;} int inter(Seg a,Seg b){ Point p1,p2,p3,p4; p1=a.s;p2=a.e; p3=b.s;p4=b.e; if (!(min(p1.x,p2.x)<=max(p3.x,p4.x) && min(p3.x,p4.x)<=max(p1.x,p2.x) && min(p1.y,p2.y)<=max(p3.y,p4.y) && min(p3.y,p4.y)<=max(p1.y,p2.y))) return -1;/*不相交*/ int d1= sgn(cross(p1,p2,p3)); int d2=sgn(cross(p1,p2,p4)); int d3=sgn(cross(p3,p4,p1)); int d4=sgn(cross(p3,p4,p2)); if(d1==0 && d2==0) return 0;/*部分重合*/ if(d1*d2==0 && d3*d4==0) return 1;/*端点重合*/ if(d1*d2==0 || d3*d4==0) return 2;/*一端点在另一线段非端点的点上*/ if(d1*d2<0 && d3*d4<0) return 3;/*线段相交*/ else return -1; } Point point[100]; struct Seg2{ int left,right; int len; }seg[100]; int tot=0; int pn,sn; int main() { #ifndef ONLINE_JUDGE freopen("aaa","r",stdin); #endif int T; while(1){ rd(n); if(!n) break; for(int i=1;i<=n;i++) scanf("%d",&seg[i].len); seg[1].left=0;seg[1].right=2*seg[1].len; for(int i=2;i<=n;i++){ seg[i].left=seg[i].right=-100000; for(int j=1;j<i;j++){ int tl,tr; int d=abs(seg[i].len-seg[j].len); tl=seg[j].right-d; tr=tl+2*seg[i].len; seg[i].left=max(seg[i].left,tl); seg[i].right=max(seg[i].right,tr); } } //for(int i=1;i<=n;i++) cout<<seg[i].left<<" "<<seg[i].right<<endl; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(seg[j].len>seg[i].len){ if(j<i && seg[j].right>seg[i].left) seg[i].left=seg[j].right; if(j>i && seg[j].left<seg[i].right) seg[i].right=seg[j].left; } } } int ans[100]; bool fi=true; for(int k=1;k<=n;k++) if(seg[k].left<seg[k].right){ printf("%s%d",fi?"":" ",k); fi=false; } puts(""); } return 0; }
相关文章推荐
- 小学知识三角函数和差化积
- 使用qsort对二维数组李的某一列元素进行排序
- poj 2528 Mayor's posters 线段树+离散化
- 大端模式与小端模式解析
- 为什么使用开源软件?
- Arrays中equal和deepEquals区别
- LeetCode OJ7 Reverse Integer 小结
- qt渐变效果
- 从a站点跳转到b站点,通过url的参数判断是否让该用户选择身份
- maven 学习总结(一)——Maven入门
- IBM linux on power 开发者技术大会记录
- python 错误 解决办法
- 对数据持久化的理解
- Java版斯诺克开源分享
- 在Myeclipse8.5如何安装Jython
- hdu 1849Rabbit and Grass(博弈论 一维nim游戏)
- JAVA问题总结之23--生成一个长度为100的随机整数list
- iOS 系统图片选择和保存
- 0922Android传感器实例指南针
- 定时器Timer