200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > L3-006 迎风一刀斩 (几何)

L3-006 迎风一刀斩 (几何)

时间:2021-11-24 07:15:22

相关推荐

L3-006 迎风一刀斩 (几何)

分析

通过存储每个点来记录图形的信息。

1.当两个图形的直角数目都等于他们各自图形的点数减去二,同时两个图形非直角的两个角都可以相互拼接成pi(派)或者pi/2(派的一半),那么如果他们非直角之间的线长度相等,则输出yes。

2.当两个图形的直角数目都等于4,那么只要他们任意一个边互相相等,输出yes。

C++代码

#include<bits/stdc++.h>using namespace std;typedef long long LL;int T,n,m,fenzi,fenmu;int gcd(int a,int b){return b?gcd(b,a%b):a;}typedef pair<int,int> PII;PII a[10],b[10];void ck(PII a[],int n,int &X,int &x,int &Y,int &y,int &st){X=x=Y=y=st=0;for (int i=0;i<n;i++) {if (a[i].first==a[(i+1)%n].first) {st++;int t=abs(a[i].second-a[(i+1)%n].second);if (t>Y) y=Y,Y=t;else y=t;//cout<<"----"<<y<<" "<<st<<endl;} else if (a[i].second==a[(i+1)%n].second) {st++;int t=abs(a[i].first-a[(i+1)%n].first);if (t>X) {x=X,X=t;}else {x=t;}//cout<<"----"<<x<<" "<<st<<endl;}}}bool pet(int n,int m){int x,X,y,Y,st;ck(b,m,X,x,Y,y,st);if (st!=m-1) return 0;int A=Y-y,B=X-x;ck(a,n,X,x,Y,y,st);if (st!=n-1) return 0;return (X==A&&Y==B)||(X==B&&Y==A);}bool jdg(){int x,X,y,Y,st;ck(b,4,X,x,Y,y,st);if (st<3) return 0;if (st==4) {int A=X,B=Y;ck(a,4,X,x,Y,y,st);if (st!=4) return false;return A==X||A==Y;}int hh,A,B;if(y==0) {hh=Y;A=X;B=x;} else {hh=X;A=Y;B=y;}ck(a,4,X,x,Y,y,st);if (st<3) return 0;if (y==0) return hh==Y&&x+A==X+B;else return hh;}int main(){int x,y;scanf("%d",&T);while (T--) {scanf("%d",&n);for (int i=0;i<n;i++) {scanf("%d%d",&x,&y);a[i]={x,y};}scanf("%d",&m);for (int i=0;i<m;i++) {scanf("%d%d",&x,&y);b[i]={x,y};}if(n>m) {swap(n,m); swap(a,b);}bool flag=0;if(n==4&&m==4) flag=jdg();else flag=pet(n,m);if(flag) puts("YES");else puts("NO");}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。