2015年ALPC暑期专题练习I (计算几何) A
来源:互联网 发布:太原师范学院教务网络 编辑:程序博客网 时间:2024/06/07 20:01
久违的1A,爽!
题目大意:根据玩具的坐标,得到每个硬纸板中有几个玩具。
思路:先对线进行排序,得到每个分片的id,然后逐个判断玩具在哪条线的左边,即可得到id。主要是点和线类的构造函数与拷贝函数。
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<string>#include<map>#include<set>#include<algorithm>#include<vector>//#include<cmath>using namespace std;int min_2 (int& a,int& b){return a<b?a:b;}int max_2 (int& a,int& b){return a>b?a:b;}const int MAX_NUM = 5000+10;struct point{ int x,y; point (int i,int j){x=i;y=j; } point (const point& p){x=p.x;y=p.y; } point& operator = (const point& p){x=p.x;y=p.y;return *this; } point (){}};struct line : point{ point x,y; line (point i,point j){x=i;y=j; } line (){}};line lineSet[MAX_NUM];struct polygon : point{ point ul,ll,lr,ur;}polygonSet[MAX_NUM];int n,m,x1,y1,x2,y2;int toyNum[MAX_NUM];bool cmp (line l,line r){ int ll=min_2 (l.x.x,l.y.x); int lr=min_2 (r.x.x,r.y.x); return ll<lr;}int CrossMuti (point a,point b){ return a.x*b.y-a.y*b.x;}int JudgePointDirWithLine (point& x,int id) { point ac (x.x-lineSet[id].x.x , x.y-lineSet[id].x.y); point ab (lineSet[id].y.x-lineSet[id].x.x , lineSet[id].y.y-lineSet[id].x.y); if (CrossMuti (ac,ab)<0)//x int id rightreturn 1; else if (CrossMuti (ac,ab)>0)//x int id liftreturn 2; else return 0;//error}int main(){ while (scanf ("%d",&n) && n) {scanf ("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);memset (toyNum,0,sizeof (toyNum));int ui,li;for (int i=1;i<=n;i++){ scanf ("%d %d",&ui,&li); lineSet[i].x=point (ui,y1); lineSet[i].y=point (li,y2);}lineSet[0].x=point (x1,y1);lineSet[0].y=point (x1,y2);lineSet[n+1].x=point (x2,y1);lineSet[n+1].y=point (x2,y2);sort (lineSet,lineSet+n+2,cmp);/*for (int i=0;i<n+2;i++) printf ("%d ",lineSet[i].y.x);printf ("\n");*/point toy;for (int i=0;i<m;i++){ scanf ("%d %d",&toy.x,&toy.y); for (int j=0;j<n+2;j++){if (JudgePointDirWithLine (toy,j)==2){ ++toyNum[j-1]; break;} }}for (int i=0;i<=n;i++) printf ("%d: %d\n",i,toyNum[i]);printf ("\n"); } return 0;}
0 0
- 2015年ALPC暑期专题练习I (计算几何) A
- 2015年ALPC暑期专题练习I (计算几何) B
- 2015年ALPC暑期专题练习I (计算几何) C
- 2015年ALPC暑期专题练习I (计算几何) D Intersecting Lines
- 2015年ALPC暑期专题练习I (计算几何) Space Ant
- 2015年ALPC暑期专题练习I (计算几何) F Pick-up sticks
- 2015年ALPC暑期专题练习I (计算几何) G - Treasure Hunt
- 2015年ALPC暑期专题练习I (计算几何) J Kadj Squares
- 2015年ALPC暑期代码能力练习I D Upgrading Array
- I Think I Need a Houseboat ZOJ(几何计算)
- NBUT-2014暑期集训专题练习1 -> 二分法 A题
- 计算几何专题学习
- [专题学习][计算几何]
- 专题:基础计算几何
- 计算几何知识专题
- HDU 1065 I Think I Need a Houseboat 计算几何
- [kuangbin带你飞]专题十三 基础计算几何A
- 计算几何专题(计算两圆相交面积)
- 关于java.security.MessageDigest类
- 解决MyEclipse jdk 8 报错问题
- 文章标题
- 发布高品质软件的系统方法
- leetcode: Summary Ranges
- 2015年ALPC暑期专题练习I (计算几何) A
- Functional MRI (second edition) -- 6. From Neuronal to Hemodynamic Activity
- VOA 2015-07-16
- mongoDB 入门指南、示例
- 数字图像处理的基本原理和常用方法
- JSP实现文件上传,解决上传文件名为乱码问题
- MP3压缩算法
- struts文件上传
- JaCoCo:分析单元测试覆盖率的利器