返回顶部

2020牛客暑期多校训练营(第三场)C-Operation Love(计算几何)

题目链接

我是演员来的,比赛时候发现了长度为6,9,8的边都是唯一的,那么就只要找到6,8相交的那个点,将图形平移到交点在原点处,然后根据另两个端点的象限进行分类讨论,结果WA了。。挂了两发后面也懒得写了=。=慢慢补吧。至今没想清楚坑点在哪里。赛后发现只要求一下叉积判断正负就可以了。。几何题好久没写是真的不太行QAQ。

#include <bits/stdc++.h>
using namespace std;
const double eps=1e-5;
struct Point{
    double x,y;
}p[50];
double dist(Point a,Point b){
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main(){
    int t;cin>>t;
    while(t--){
        for(int i=0;i<20;i++){
            cin>>p[i].x>>p[i].y;
        }
        for(int i=0;i<20;i++){
            if(fabs(dist(p[i],p[(i+1)%20])-9)<=eps&&fabs(dist(p[(i+1)%20],p[(i+2)%20])-8)<=eps){
                reverse(p,p+20);
                break;
            }
        }
        bool flag;
        for(int i=0;i<20;i++){
            if(fabs(dist(p[i],p[(i+1)%20])-9)<=eps){
                Point a,b;
                a.x=p[i].x-p[(i+1)%20].x;
                a.y=p[i].y-p[(i+1)%20].y;
                b.x=p[(i+2)%20].x-p[(i+1)%20].x;
                b.y=p[(i+2)%20].y-p[(i+1)%20].y;
                flag = a.x * b.y - a.y * b.x > 0;
            }
        }
        puts(!flag?"left":"right");
    }
    return 0;
}
posted @ 2020-07-18 18:38  Charles1999  阅读(186)  评论(0编辑  收藏  举报