DIY群賽 1004

來源:互聯網
上載者:User

#include<iostream><br />#include<cmath><br />#include<cstdio><br />#include<cstdlib><br />using namespace std;<br />__int64 f_min(__int64 x,__int64 y){<br /> return x>y?y:x;<br />}<br />__int64 f_max(__int64 x,__int64 y){<br /> return x<y?y:x;<br />}<br />class point{<br />private:<br /> __int64 px,py;<br />public:<br /> void set(){<br /> scanf("%I64d%I64d",&px,&py);</p><p> }<br />void set(__int64 xx,__int64 xy){<br /> px=xx;py=xy;<br /> }<br /> __int64 x(){return px;}<br /> __int64 y(){return py;}<br />};<br />__int64 get_gcd(__int64 x,__int64 y){<br />__int64 t;<br />while(x%y){<br />t=x%y;<br />x=y;<br />y=t;<br />}<br />return y;<br />}<br />class frac{<br />private:<br />__int64 fz,fm;<br />bool sym;<br />public:<br />bool small(__int64 x){<br />__int64 temp;<br />if(sym)temp=fz;<br />else temp=-fz;<br />return temp<=fm*x;<br />}<br />bool big(__int64 x){<br />__int64 temp;<br />if(sym)temp=fz;<br />else temp=-fz;<br />return temp>=fm*x;<br />}<br />void div(__int64 x,__int64 y){<br />sym=1;<br />if(x<0){<br />sym^=1;x=-x;<br />}<br />if(y<0){<br />sym^=1;y=-y;<br />}<br />__int64 gcd=get_gcd(x,y);<br />fz=x/gcd;<br />fm=y/gcd;<br />}<br />void change(__int64 m,__int64 x,__int64 y,__int64 z){</p><p>__int64 gcd;<br />if(sym)m=-m;<br />fz+=fm*m;<br />if(fz<0){<br />sym^=1;<br />fz=-fz;<br />}<br />gcd=get_gcd(fz,fm);<br />fz/=gcd;fm/=gcd;<br />if(x<0){<br />sym^=1;x=-x;<br />}<br />if(y<0){<br />sym^=1;y=-y;<br />}<br />gcd=get_gcd(x,y);<br />fz*=x/gcd;fm*=y/gcd;<br />if(!sym)z=-z;<br />fz+=fm*z;<br />if(fz<0){<br />sym^=1;<br />fz=-fz;<br />}<br />gcd=get_gcd(fz,fm);<br />fz/=gcd;fm/=gcd;<br />}<br />void disp(){<br />if(!sym&&fz)printf("-");<br />printf("%I64d",fz);<br />if(fm!=1&&fz)printf("/%I64d",fm);<br />}<br />};<br />class line{<br />private:<br /> point s,e;<br />public:<br /> void set(){<br />point temp;<br /> s.set();e.set();<br />if(s.x()>e.x()){<br />temp=s;s=e;e=temp;<br />}<br /> }<br />bool ispoint(){<br />return (s.x()==e.x()&&s.y()==e.y());<br />}<br />bool friend check_point(line x,line y){<br />if(x.ispoint()){<br />if(y.ispoint()){<br />if(x.s.x()==y.s.x()&&x.s.y()==y.s.y()){<br />printf("1/n%I64d %I64d/n",x.s.x(),x.s.y());<br />}else{<br />printf("0/n");<br />}<br />return 1;<br />}<br />if((y.e.y()-y.s.y())*(y.e.x()-x.s.x())==(y.e.x()-y.s.x())*(y.e.y()-x.s.y())){<br />if(x.s.x()<=y.e.x()&&x.s.x()>=y.s.x()&&x.s.y()>=f_min(y.s.y(),y.e.y())&&x.s.y()<=f_max(y.s.y(),y.e.y())){<br />//就是這裡!!當一條線段是點,另一條線段垂直於x軸時,原來的代碼只考慮點的x座標是否線上段兩點間,沒考慮y座標,就會出錯=。=<br />//怎麼辦?感覺這反映出了我的思維邏輯的不嚴密性,思考問題不夠周到,以後做題目也會各種BUG,各種沒考慮,各種找不出錯誤<br />//這怎麼改?!!怎麼辦怎麼辦?!!!!<br />//我思考來思考去,覺得我應該更勤奮!!=。=要寫注釋啦=。=<br />//這裡上上那個if寫上判斷是否三點一線<br />//上個if寫上判斷點是否線上段內,這樣跟著程式走一遍時效率會高很多<br />//這樣我也不會懶得走了,這樣我就不會盲目的找BUG了<br />//然後這種線段的題目肯定會考慮與座標軸平行垂直的特殊情況<br />//然後跟著程式走一遍的時候,一看注釋再一想就想到了嘛!!!!!<br />//勤能補挫,總結完畢<br />printf("1/n%I64d %I64d/n",x.s.x(),x.s.y());<br />return 1;<br />}<br />}<br />printf("0/n");<br />return 1;<br />}<br />if(y.ispoint()){<br />if((x.e.y()-x.s.y())*(x.e.x()-y.s.x())==(x.e.x()-x.s.x())*(x.e.y()-y.s.y())){<br />if(y.s.x()<=x.e.x()&&y.s.x()>=x.s.x()&&y.s.y()>=f_min(x.s.y(),x.e.y())&&y.s.y()<=f_max(x.s.y(),x.e.y())){<br />printf("1/n%I64d %I64d/n",y.s.x(),y.s.y());<br />return 1;<br />}<br />}<br />printf("0/n");<br />return 1;<br />}<br />return 0;<br />}<br />void friend cross_point(line x,line y){<br />//printf("^%I64d/n",y.s.y());<br />__int64 key1=(x.e.x()-x.s.x())*(y.e.y()-y.s.y());<br /> __int64 key2=(y.e.x()-y.s.x())*(x.e.y()-x.s.y());<br /> __int64 key=key1-key2;</p><p> if(key==0){<br />if((y.e.y()-y.s.y())*(y.e.x()-x.s.x())==(y.e.y()-x.s.y())*(y.e.x()-y.s.x())){<br />line temp;<br />if(x.s.x()==x.e.x()){<br />if(x.s.y()==y.s.y()){<br />printf("INF/n");<br />return ;<br />}<br />if(x.s.y()>y.s.y()){<br />temp=x;x=y;y=temp;<br />}<br />if(x.e.y()<y.s.y()){<br />printf("0/n");<br />return;<br />}<br />if(x.e.y()==y.s.y()){<br />printf("1/n%I64d %I64d/n",x.s.x(),x.e.y());<br />return;<br />}<br />if(x.e.y()>y.s.y()){<br />printf("INF/n");<br />return ;<br />}<br />}else{<br />if(x.s.x()>y.s.x()){<br />temp=x;x=y;y=temp;<br />}<br />if(x.e.x()<y.s.x()){<br />printf("0/n");<br />return;<br />}<br />if(x.e.x()==y.s.x()){<br />printf("1/n%I64d %I64d/n",x.e.x(),x.e.y());<br />return;<br />}<br />if(x.e.x()>y.s.x()){<br />printf("INF/n");<br />return ;<br />}<br />}<br />}<br />printf("0/n");<br />return;<br />}<br />//printf("%I64d %I64d %I64d/n",key1,key2,key);<br /> __int64 tcrsx;<br />frac crsx,crsy;<br /> tcrsx=__int64(x.s.y()-y.s.y())*(x.e.x()-x.s.x())*(y.e.x()-y.s.x());<br /> //printf("%I64d/n",tcrsx);<br />tcrsx-=(__int64)key2*x.s.x()-key1*y.s.x();<br />//printf("%I64d/n",tcrsx);<br /> crsx.div(tcrsx,key);<br />crsy=crsx;<br />//printf("*%I64d %I64d %I64d %I64d/n",y.s.x(),y.e.y()-y.s.y(),y.e.x()-y.s.x(),y.s.y());<br />if(y.e.x()==y.s.x())crsy.change(x.s.x(),x.e.y()-x.s.y(),x.e.x()-x.s.x(),x.s.y());<br />else crsy.change(y.s.x(),y.e.y()-y.s.y(),y.e.x()-y.s.x(),y.s.y());//*a/b+c<br />//printf("%.2lf/n",insx);<br /> if(crsx.small(f_max(x.e.x(),x.s.x()))&&crsx.big(f_min(x.e.x(),x.s.x()))){<br />if(crsx.small(f_max(y.e.x(),y.s.x()))&&crsx.big(f_min(y.e.x(),y.s.x()))){<br />printf("1/n");<br />crsx.disp();<br />printf(" ");<br />crsy.disp();<br />printf("/n");<br />return;<br />}<br /> }<br /> printf("0/n");<br />return;<br />}<br />};<br />line a,b;<br />int main(){<br />int t;<br />scanf("%d",&t);<br />while(t--){<br />a.set();b.set();<br />if(check_point(a,b))continue;<br />cross_point(a,b);<br />}<br />return 0;<br />}<br />/*<br />234<br />-1 0 0 2<br />2 2 2 4<br />*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.