栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3429 Geometry with a ruler

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3429 Geometry with a ruler

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <vector>using namespace std;#define SZ(v) ((int)(v).size())typedef long long lint;const int maxn = 300;lint gcd(lint a,lint b){ if(!b) return a; return gcd(b,a%b);}struct frac{ lint a,b; frac(){} frac(lint _a,lint _b):a(_a),b(_b){}; frac operator + (const frac &A) const{ lint ra = A.b*a + b*A.a; lint rb = b*A.b; lint g = gcd(ra,rb); return frac(ra/g,rb/g); } frac operator - (const frac &A) const{ lint ra = A.b*a - b*A.a; lint rb = b*A.b; lint g = gcd(ra,rb); return frac(ra/g,rb/g); }  frac operator * (const frac &A) const{ lint ra = a*A.a; lint rb = b*A.b; lint g = gcd(ra,rb); return frac(ra/g,rb/g); } frac operator / (const frac &A) const{ lint ra = a*A.b; lint rb = b*A.a; lint g = gcd(ra,rb); return frac(ra/g,rb/g); }};struct point { frac x, y; point(){} point(frac _x,frac _y):x(_x),y(_y){}};point operator+(const point& p1, const point& p2) { return point(p1.x + p2.x, p1.y + p2.y);}point operator-(const point& p1, const point& p2) { return point(p1.x - p2.x, p1.y - p2.y);}frac operator*(const point& p1, const point& p2) { return p1.x * p2.y - p1.y * p2.x;}point operator/(const point& p, frac r) { return point(p.x / r, p.y / r);}void get_intersection(const point& p1, const point& p2, const point& p3, const point& p4, point& c) { frac d1 = (p2 - p1) * (p3 - p1), d2 = (p2 - p1) * (p4 - p1); frac d3 = (p4 - p3) * (p1 - p3), d4 = (p4 - p3) * (p2 - p3); c = point((p3.x * d2 - p4.x * d1) / (d2 - d1), (p3.y * d2 - p4.y * d1) / (d2 - d1));}int n,m;point p[maxn+5];int main() { while(scanf("%d",&n)==1){ for(int i=1;i<=n;i++){ int a,b; scanf("%d%d",&a,&b); p[i] = point(frac(a,1),frac(b,1)); } int ls,lt,rs,rt,ans=0; scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d%d%d%d",&ls,<,&rs,&rt); get_intersection(p[ls],p[lt],p[rs],p[rt],p[n+i]); if(!p[n+i].x.a && !p[n+i].y.a){ if(!ans) ans=i; } } printf("%dn",ans); }  return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号