首页 > 其他分享 >CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(..&P a))

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

时间:2022-10-25 10:32:23浏览次数:66  
标签:return 直角三角形 int CF switch istream include cout


A. Triangle



time limit per test



memory limit per test



input



output



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

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



Input



x1, y1, x2, y2, x3, y3



Output



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;
}


标签:return,直角三角形,int,CF,switch,istream,include,cout
From: https://blog.51cto.com/u_15724837/5794115

相关文章

  • CF 312A(Whose sentence is it?-strstr(s,p))
    A.Whosesentenceisit?timelimitpertestmemorylimitpertestinputoutput......
  • CF 287A(IQ Test-枚举3个字符相等的矩阵)
    A.IQTesttimelimitpertestmemorylimitpertestinputoutputInthecity......
  • CF 286A(Lucky Permutation-数列找规律)
    A.LuckyPermutationtimelimitpertestmemorylimitpertestinputoutputp......
  • 1.1 WCF SOA架构和webservice
    1.什么是SOA?SOA全称:面向服务架构(serviceOrientedArchitecture),它是一种组件架构模式。一、定义1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据......
  • CF1716F
    与CF932E,CF1278F其实差不多捏。首先\(m\)中奇数个数是\(\left\lceil\frac{m}{2}\right\rceil\),偶数个数是\(\left\lfloor\frac{m}{2}\right\rfloor\)。下文为了方便......
  • [CF1753C]Wish I Knew How to Sort
    做题时间:2022.10.25\(【题目描述】\)给定一个长度为\(n\)的01序列\(a\)和一种操作,你需要用这种操作将序列从小到大排序。操作为:等概率随机选择两个位置\(i,j(i<j)\)......
  • CF1278F
    与CF932E其实是差不多的捏设\(p=\dfrac{1}{m},q=1-p\),那么枚举第一张是王牌的次数,有如下式子:\[\sum_{i=1}^{n}\binom{n}{i}p^iq^{n-i}i^k\]后面那个\(i^k\)可以展......
  • CF1744B Even-Odd Increments
    简要题意\(T\)组数据,每组数据给定一个长度为\(n\)的数列,有\(q\)次操作,共有两种操作:\(\texttt{0x}\),给数列中所有偶数加上\(x\);\(\texttt{1x}\),给数列中所有奇......
  • CF932E
    先介绍这样一个等式:\[n^m=\sum_{i=1}^{m}\begin{Bmatrix}m\\i\end{Bmatrix}\timesi!\times\binom{n}{i}\]等式左边的组合意义是\(m\)个不同的球放入\(n\)个不同的......
  • CF1753A1
    前言题目传送门!更好的阅读体验?提供一种更加好理解的方法。思路关键点:只要凑够就行,不需要区间数量最小。首先,每个数是\(-1\)或\(1\),说明\(n\)为奇数时,必定无解。......