题意:输入是从任意一点出发顺时针或逆时针把20个点输入,然后这个手是可以移动和旋转的,不能缩放,然后判断是左手还是右手,左手输出left ,右手输出right.
注意:这里由于输入是浮点数,所以那个sqrt后的值不为整数值
代码:
#include<iostream> #include<math.h> #include<algorithm> using namespace std; const int maxn = 25; double x[maxn],y[maxn]; double d[maxn]; int main(){ int t; cin>>t; while(t--){ for(int i=1;i<=20;i++){ scanf("%lf%lf",&x[i],&y[i]); } x[21]=x[1]; y[21]=y[1]; double tot=0; for(int i=1;i<=20;i++){ d[i]=sqrt((x[i]-x[i+1])*(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1])); tot+=x[i]*y[i+1]-x[i+1]*y[i]; } if(tot<0){ reverse(d+1,d+21);//保证逆时针 } int a,b; for(int i=1;i<=20;i++){ if(int(d[i]+0.5)==9) a=i; if(int(d[i]+0.5)==8) b = i; } int flag=0; if(a+1==b) flag=1; if(a==20&&b==1)//逆时针保证边长为9和边长为8的出现的先后顺序 flag=1; if(flag) cout<<"right"<<endl; else cout<<"left"<<endl; } return 0; }