博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2540 Hotter Colder
阅读量:5911 次
发布时间:2019-06-19

本文共 2146 字,大约阅读时间需要 7 分钟。

一道半平面相交的题目:

View Code
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long longusing namespace std;class Point{public: double x,y; Point(){} Point( double xx , double yy ):x(xx),y(yy){}}p[124],q[124];void Init( Point &pre ){ pre = Point( 0 , 0 ); p[1] = Point( 0 , 0 ); p[2] = Point( 0 , 10 ); p[3] = Point( 10 , 10 ); p[4] = Point( 10 , 0 ); p[5] = p[1]; p[0] = p[4];}void Get_line( Point pre, Point cur , double &A, double &B, double &C){ Point a = Point( (pre.x + cur.x)/2.0 , ( pre.y + cur.y )/2.0 ); A = cur.x - pre.x; B = cur.y - pre.y; C = -A*a.x - B*a.y; }Point Get_point( Point a,Point b, double A,double B,double C ){ double u = fabs( A*a.x + B*a.y + C ); double v = fabs( A*b.x + B*b.y + C ); Point ans; ans.x = ( u*b.x + v*a.x )/(u+v); ans.y = ( u*b.y + v*a.y )/(u+v); return ans; }int Solve( int n ,double A,double B,double C){ int m = 0; for( int i = 1 ; i <= n ; i ++ ) { if( A*p[i].x + B*p[i].y + C > 0 ) q[++m] = p[i]; else { if( A*p[i-1].x + B*p[i-1].y + C > 0 ) q[++m] = Get_point( p[i] , p[i-1] ,A,B,C ); if(A*p[i+1].x + B*p[i+1].y + C > 0) q[++m] = Get_point( p[i] , p[i+1] ,A,B,C ); } } for( int i =1 ; i <= m; i ++ ) p[i] = q[i]; p[m+1] = p[1]; p[0] = p[m]; return m;}double Area( int n ){ double area=0; p[n+1] = p[1]; for( int i = 1; i <= n ; i ++ ) area += p[i].x*p[i+1].y - p[i].y*p[i+1].x; return fabs( area/2.0 ); }int main( ){ Point pre,cur; bool flag = false; char str[12]; double A,B,C; int n = 4; Init( pre ); while( scanf( "%lf%lf%s",&cur.x,&cur.y,str )==3 ) { if( !flag ) { Get_line( pre , cur , A,B,C ); if( str[0] == 'C' ) { if( A*pre.x + B*pre.y + C < 0 ) { A = -A; B = -B ; C = -C; } } else if( str[0] == 'H' ) { if( A*cur.x + B*cur.y + C < 0 ) { A = -A ; B = -B ; C = -C; } } else {flag = true;puts( "0.00" );continue;} n = Solve( n ,A ,B ,C ); printf("%.2f\n",Area( n ) ); pre = cur; } else puts( "0.00" ); } //system( "pause" ); return 0;}

 

转载于:https://www.cnblogs.com/bo-tao/archive/2012/09/14/2685782.html

你可能感兴趣的文章
php结合redis实现高并发下的抢购、秒杀功能
查看>>
统计服务连接状况
查看>>
Tomcat编译jsp生成Servlet文件的存放位置
查看>>
Android事件总线(三)otto用法全解析
查看>>
js数组实现不重复插入数据
查看>>
[译]使用 Siesta 处理 Swift 网络请求
查看>>
Android 中的子线程解析
查看>>
aidl跨进程通讯
查看>>
小程序上传图片到七牛云(支持多张上传,预览,删除)
查看>>
spring boot 整合mybatis 无法输出sql的问题
查看>>
为什么要用IPython/Jupyter?
查看>>
Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
查看>>
数据可视化之 Sankey 桑基图的实现
查看>>
项目实战-Api的解决方案
查看>>
前端面试题总结
查看>>
(三)从jvm层面了解线程的启动和停止
查看>>
SOA和微服务之间的区别
查看>>
IBM提出8位深度网络训练法,提速4倍同时保持高精度
查看>>
苹果发布Core ML 2
查看>>
“智能云”战略新品震撼发布,开发者如何快速上手?
查看>>