zoukankan      html  css  js  c++  java
  • 2020牛客多校第三场 C题Operation Love(几何,模拟)

    2020牛客多校第三场 C题Operation Love(几何,模拟)

    Operation Love

    题意:给你20个点组成的手印,判断是左手还是右手。

    题解:(非官方题解)根据点与点的距离关系,找出手底部两点与拇指与小指的2两点,共4个点,可以组成一个梯形。

    shou

    然后枚举它的所有情况,

    当dd的y坐标大于cc的y坐标,若d的x坐标大于dd的x坐标为右手,反之为左手。

    当dd的y坐标小于cc的y坐标,若d的x坐标小于dd的x坐标为右手,反之为左手。

    当dd的y坐标等于cc的y坐标,若d在dd上面且在c左边为右手,若d在dd下面且在c右边为右手,否则为左手。

    #include<iostream>
    #include<vector>
    #include<cmath>
    #define pb push_back
    using namespace std;
    int t,n;
    const double minn=0.001;
    double x[27],y[27];
    vector<pair<double,double>>s9,s8,s6;
    pair<double,double>d,c,dd,cc;
    double go(int i,int j){
    	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
    }
    
    void gao(){
    	int ok;
    	if(dd.second>cc.second){
    		if(d.first<dd.first){
    			ok=1;
    		}
    		else{
    			ok=0;
    		}
    	}
    	else if(dd.second<cc.second){
    		if(d.first>dd.first){
    			ok=1;
    		}
    		else{
    			ok=0;
    		}
    	}
    	else{
    		if(c.second>cc.second){
    			if(d.first>c.first){
    				ok=1;
    			}
    			else{
    				ok=0;
    			}
    		}
    		else{
    			if(d.first<c.first){
    				ok=1;
    			}
    			else{
    				ok=0;
    			}
    		}
    	}
    	if(ok==1){
    		printf("left
    ");
    	}
    	else{
    		printf("right
    ");
    	}
    }
    
    int main(){
    	scanf("%d",&t);
    	while(t--){
    		s9.clear();
    		s8.clear();
    		s6.clear();
    		for(int i=1;i<=20;i++){
    			scanf("%lf%lf",&x[i],&y[i]);
    		}
    		for(int i=1;i<=20;i++){
    			for(int j=i+1;j<=20;j++){
    				if(fabs(go(i,j)-9)<=minn){
    					s9.pb({x[i],y[i]});
    					s9.pb({x[j],y[j]});
    				}
    				if(fabs(go(i,j)-8)<=minn){
    					s8.pb({x[i],y[i]});
    					s8.pb({x[j],y[j]});
    				}
    				if(fabs(go(i,j)-6)<=minn){
    					s6.pb({x[i],y[i]});
    					s6.pb({x[j],y[j]});
    				}
    			}
    		}
    		/*
    		puts("");
    		for(int i=0;i<s9.size();i++){
    			printf("%lf %lf
    ",s9[i].first,s9[i].second);
    		}puts("");
    		puts("");
    		for(int i=0;i<s8.size();i++){
    			printf("%lf %lf
    ",s8[i].first,s8[i].second);
    		}puts("");
    		puts("");
    		for(int i=0;i<s6.size();i++){
    			printf("%lf %lf
    ",s6[i].first,s6[i].second);
    		}puts("");
    		*/
    		for(int j=0;j<s8.size();j++){
    			int ok=1;
    			for(int i=0;i<s9.size();i++){
    				if(s8[j]==s9[i]){
    					ok=0;
    				}
    			}
    			if(ok==1){
    				c=s8[j];
    			}
    			else{
    				cc=s8[j];
    			}
    		}
    		for(int j=0;j<s6.size();j++){
    			int ok=1;
    			for(int i=0;i<s9.size();i++){
    				if(s6[j]==s9[i]){
    					ok=0;
    				}
    			}
    			if(ok==1){
    				d=s6[j];
    			}
    			else{
    				dd=s6[j];
    			}
    		}
    		gao();
    	}
    }
    
    
  • 相关阅读:
    MS SQL Server版本的选择
    ANSI,ASCII,Unicode的区别与联系!
    解决MSSQL中插入中文数据显示乱码的问题!
    ASP.NET中website与webApplication有何区别?
    常用SQL语句总结.
    外键的具体应用和表连接!
    String和datetime在SQL中和在C#中相互转换方法总结
    外键的学习
    if(!IsPostBack)的使用?
    如何在模板的内容页中添加javascript代码?
  • 原文地址:https://www.cnblogs.com/whitelily/p/13337923.html
Copyright © 2011-2022 走看看