zoukankan      html  css  js  c++  java
  • codeforces 13 b

    给你三根线段判段是否组成了A

    条件,两条线段交于端点并且夹角不大于90,第三条线段端点在两条线段上并且划分的大小满足 大:小<4:1

    注释很全。(主要是我记不清楚了,,好像过了一个多星期了)

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 typedef long long db;
     5 int inmid(db k1,db k2,db k3){return (k1-k3)*(k2-k3)<=0;}// k3 在 [k1,k2] 内
     6 struct point{
     7     ll x,y;
     8     point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
     9     point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
    10     point operator * (db k1) const{return (point){x*k1,y*k1};}
    11     point operator / (db k1) const{return (point){x/k1,y/k1};}
    12     int operator == (const point &k1) const{return x==k1.x&&y==k1.y;}
    13 };
    14 int inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);}
    15 ll cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
    16 ll dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}
    17 struct line {
    18     // p[0]->p[1]
    19     point p[2];
    20     line(point k1, point k2) {p[0] = k1;p[1] = k2;}
    21     point &operator[](int k) { return p[k]; }
    22 };
    23 ll cross(line a,line b){return cross(a[1]-a[0],b[1]-b[0]);}
    24 ll dot(line a,line b){return dot(a[1]-a[0],b[1]-b[0]);}
    25 int t;point p[7];
    26 vector<line> l;
    27 bool check(ll x,ll y){if(x*5<y)return 0;if(x*5>y*4)return 0;return 1;}
    28 bool slove(line a,line b,line c){
    29     if(a[1]==b[1])swap(a[0],a[1]),swap(b[0],b[1]);
    30     if(a[1]==b[0])swap(a[0],a[1]);
    31     if(a[0]==b[1])swap(b[0],b[1]);
    32     if(!(a[0]==b[0]))return 0;//判相交
    33     if(cross(a,b)==0)return 0;//重合
    34     if(dot(a,b)<0)return 0;//夹角
    35     if(cross(a[1]-a[0],c[1]-a[0])==0&&cross(b[1]-b[0],c[0]-b[0])==0){}
    36     else swap(c[0],c[1]);
    37     if(!(cross(a[1]-a[0],c[1]-a[0])==0&&cross(b[1]-b[0],c[0]-b[0])==0))return 0;//共线
    38     if(!inmid(a[0],a[1],c[1]))return 0;//在线段上
    39     if(!inmid(b[0],b[1],c[0]))return 0;
    40     //比例
    41     if(!check(abs(a[0].x-c[1].x),abs(a[1].x-a[0].x)))return 0;
    42     if(!check(abs(a[0].y-c[1].y),abs(a[1].y-a[0].y)))return 0;
    43     if(!check(abs(b[0].x-c[0].x),abs(b[0].x-b[1].x)))return 0;
    44     if(!check(abs(b[0].y-c[0].y),abs(b[0].y-b[1].y)))return 0;
    45     return 1;
    46 }
    47 
    48 int main(){
    49     scanf("%d",&t);
    50     while(t--){
    51         l.clear();
    52         for(int i=1;i<=6;i++)scanf("%lld%lld",&p[i].x,&p[i].y);
    53         l.push_back({p[1],p[2]});l.push_back({p[3],p[4]});l.push_back({p[5],p[6]});
    54         if(slove(l[0],l[1],l[2]))cout<<"YES"<<endl;
    55         else if(slove(l[0],l[2],l[1]))cout<<"YES"<<endl;
    56         else if(slove(l[1],l[2],l[0]))cout<<"YES"<<endl;
    57         else cout<<"NO"<<endl;
    58     }
    59 }
    60 /**
    61 1
    62 0 0 0 6
    63 0 6 2 -4
    64 1 1 0 1
    65  */
    View Code
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/MXang/p/10749603.html
Copyright © 2011-2022 走看看