摘要: http://poj.org/problem?id=1039黑书上的一道题目:题意:有一宽度为1的折线管道,上面顶点为(xi,yi),所对应的下面顶点为(xi,yi-1),假设管道都是不透明的,不反射的,光线从左边入口处的(x0,y0),(x,y0-1)之间射入,向四面八方传播,求解光线最远能传播到哪里(取x坐标)或者是否能穿透整个管道. 如果一根光线自始至终都未擦到任何顶点,那么它肯定不是最优的,因为可以通过平移来使之优化,如果只碰到一个顶点,那也不是最优的,可以通过旋转,使它碰到另一个顶点,并且更优,即最优光线一定擦到一个上顶点和一个下顶点. 这样枚举所有的上下两个转折点形成线段,然后从0 阅读全文
posted @ 2012-05-22 22:14 E_star 阅读(337) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1654Area给定起点(0,0)然后给出1 - 4 | 6 - 9 表示走的方向,输入数据保证能够回到原点。很裸的叉积求多边形面积。这里精度控制很坑爹,只要出现小数就取整数+0.5,double不能控制,所以用long long或者__int64来控制。#include <cstdio>#include <cstring>#include <iostream>#define maxn 1000010struct point{ int x,y;}p[maxn];char str[maxn];int dir[ 阅读全文
posted @ 2012-05-22 19:08 E_star 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 点结构:struct point{ double x,y; point(double a = 0,double b = 0): x(a),y(b){}}; 浮点误差处理:int dblcmp(double x){ if(fabs(x) < eps) return 0; return x > 0 ? 1:-1;}或者int dblcmp(double x){ if (x > eps) return 1; else if (x < -eps) return -1; else return 0;}判断线段是否相交并求交点(规范相交)double det(double... 阅读全文
posted @ 2012-05-22 17:21 E_star 阅读(255) 评论(0) 推荐(0) 编辑