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

zoj 3400 Treasure Hunting

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

zoj 3400 Treasure Hunting

#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <string.h>#include <cstdlib>#include <map>#include <set>#include <complex>#define tline tseg#define Op operator#define Re returnusing namespace std;typedef long long tpty;int f[1005];struct tpoint{tpty x,y;tpoint() { }tpoint(tpty x,tpty y) : x(x), y(y) { }#define Opb(cl) bool Op cl(const tpoint &b)const{Re ((x cl b.x)||(x==b.x&&(y cl b.y)));}Opb(<)Opb(<=)Opb(>)Opb(>=)Opb(!=)bool Op==(tpoint &b){Re (x==b.x&&y==b.y);}tpoint Op+(const tpoint &b){Re tpoint(x+b.x,y+b.y);}tpoint Op-(const tpoint &b){Re tpoint(x-b.x,y-b.y);}tpty Op%(const tpoint &b){Re x*b.y-b.x*y;}tpty Op*(const tpoint &b){Re x*b.x+y*b.y;}tpoint Op*(const tpty &b){Re tpoint(x*b,y*b);}tpoint Op/(const tpty &b){Re tpoint(x/b,y/b);}#undef Opp(cl)};struct tseg{tpoint s,e;tpty x(){Re llabs(s.x-e.x);}tpty y(){Re llabs(s.y-e.y);}bool on_line(tpoint &b){Re (s-e)%(e-b)==0;}bool on_seg(tpoint &b){Re on_line(b)&&b>=s&&b<=e;}bool is_parallel(tline &b){Re (s-e)%(b.s-b.e)==0;}bool same_line(tline &b){Re is_parallel(b)&&on_line(b.e);}void merge_seg(tseg &b){e=max(e,b.e),s=min(s,b.s);}bool inter_line(tline &b){if(is_parallel(b)&&!on_line(b.e))return false;return true;}tpoint inter_point(tline &b){return s+(e-s)*((b.e-b.s)%(b.s-s))/((b.e-b.s)%(e-s));}};set<tpoint> st;tpty gcd(tpty a,tpty b){return b?gcd(b,a%b):a;}int unfind(int x){return f[x]==x?x:(f[x]=unfind(f[x]));}void inter_seg(tseg a,tseg b){if(a.is_parallel(b))return;tpoint tmp=a.inter_point(b);if(a.on_seg(tmp)&&b.on_seg(tmp))if(st.find(tmp)==st.end())st.insert(tmp);}tseg ts[1005];int main(){int n,ans;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)f[i]=i;long long ans=0;for(int i=0;i<n;i++){scanf("%lld%lld%lld%lld",&ts[i].s.x,&ts[i].s.y,&ts[i].e.x,&ts[i].e.y);if(ts[i].e<ts[i].s)swap(ts[i].e,ts[i].s);}for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(ts[i].same_line(ts[j])&&ts[i].e>=ts[j].s&&ts[i].s<=ts[j].e)f[unfind(i)]=unfind(j);for(int i=0;i<n;i++)if(unfind(i)!=i) ts[unfind(i)].merge_seg(ts[i]);for(int i=0;i<n;i++)if(i==unfind(i)){st.clear();for(int j=0;j<i;j++)if(j==unfind(j))inter_seg(ts[i],ts[j]);ans+=gcd(ts[i].x(),ts[i].y())+1-(long long)st.size();}printf("%lldn",ans);}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381029.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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