首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(.&P a))

2013-01-26 
CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(..&P a))A. Triangletime limit per test2 seco

CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(..&P a))
A. Triangletime limit per test2 secondsmemory limit per test64 megabytesinputstandard inputoutputstandard output

判断一个格点三角形是直角三角形,近似直角三角形,还是都不是.

Hint:近似直角三角形是指把一个三角形的一个点移动1个单位长度(移动后仍为格点三角形),其能变成直角三角形的非直角三角形

Input

 x1,?y1,?x2,?y2,?x3,?y3 表示3点坐标(都在格点上),不超过 100.

Output

I直角三角形输出 RIGHT,近似直角三角形输出 ALMOST, 都不是输出 NEITHER.

Sample test(s)input
0 0 2 0 0 1
output
RIGHT
input
2 3 4 5 6 6
output
NEITHER
input
-1 0 2 0 0 1
output
ALMOST

各种判断…

注意格点三角形在移动完可能出现点重合(0向量)

仍满足向量直角公式a X b = |a||b|

以及switch-case-default的用法。

△:default打错不会提示.

PS:istream& operator<<的重载中 输入的struct 如果不加&,是读不进的。


#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<functional>#include<algorithm>#include<cmath>using namespace std;struct P{int x,y;P(){}P(int _x,int _y):x(_x),y(_y){}friend istream& operator>>(istream& cin,P &a){cin>>a.x>>a.y;return cin;}void move(int d){if (d==1) x++;if (d==-1) x--;if (d==2) y++;if (d==-2) y--;return;}}a[3];struct V{int x,y;V(){}V(int _x,int _y):x(_x),y(_y){}V(P a,P b):x(b.x-a.x),y(b.y-a.y){}friend int operator*(V a,V b){return a.x*b.y-a.y*b.x;}int dis2(){return x*x+y*y;}friend bool right_angle(V a,V b){return pow(a*b,2)==a.dis2()*b.dis2();}}c[3];void res_c(){for (int i=0;i<3;i++) c[i]=V(a[i],a[(i+1)%3]); }bool is_r_trangle(){res_c();for (int i=0;i<3;i++) if (!c[i].dis2()) return 0;for (int i=0;i<2;i++)for (int j=i+1;j<=2;j++) if (right_angle(c[i],c[j])) {/*cout<<i<<' '<<j<<endl;*/return 1;}return 0;}int solve(){if (is_r_trangle()) return 1;for (int i=0;i<3;i++){for (int j=-2;j<=2;j++){if (j==0) continue;a[i].move(j);if (is_r_trangle()){/*cout<<i<<' '<<j<<endl;*/ return 2;}a[i].move(-j);}}return 0;}int main(){for (int i=0;i<3;i++) cin>>a[i];switch (solve()) {case 1:cout<<"RIGHT";break;case 2:cout<<"ALMOST";break;default:cout<<"NEITHER";}cout<<endl;return 0;}

热点排行