zoukankan      html  css  js  c++  java
  • HDU 5533 Dancing Stars on Me( 有趣的计算几何 )


    **链接:****传送门 **

    题意:给出 n 个点,判断能不能构成一个正 n 边形,这 n 个点坐标是整数

    思路:这道题关键就在与这 n 个点坐标是正整数!!!可以简单的分析,如果 n != 4,那一定就不能构成正 n 边形,否则暴力一下找到最小距离,这个最小距离一定是最短边长,暴力查找一下等于这个边长边的个数,如果是 4 个就能构成正 4 边形了

    balabala:

    1. 分析 + 暴力出奇迹,出题人还是蛮有趣的!希望能在比赛中get到这些关键点。
    2. A strong man will struggle with the storms of fate.

    /*************************************************************************
        > File Name: hdu5533.cpp
        > Author:    WArobot 
        > Blog:      http://www.cnblogs.com/WArobot/ 
        > Created Time: 2017年05月10日 星期三 19时33分30秒
     ************************************************************************/
    
    #include<bits/stdc++.h>
    using namespace std;
    
    struct point{
    	int x,y;
    }po[110];
    
    double len[110][110];
    int T,n;
    double dis(point a,point b){
    	return (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y);
    }
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		memset(len,0,sizeof(len));
    		scanf("%d",&n);
    		for(int i=0;i<n;i++){
    			scanf("%d%d",&po[i].x,&po[i].y);
    		}
    		if(n!=4)	printf("NO
    ");
    		else{
    			double min_len = 1e10;
    			for(int i=0;i<n;i++)
    				for(int j=i+1;j<n;j++){
    					len[i][j] = dis( po[i], po[j] );
    					min_len = min( min_len , len[i][j] );
    				}
    			int cnt = 0;
    			for(int i=0;i<n;i++)
    				for(int j=i+1;j<n;j++)
    					if( len[i][j] == min_len )
    						cnt++;
    			if(cnt == 4)	printf("YES
    ");
    			else			printf("NO
    ");
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    转:Asp.net Mvc4默认权限详细(上)
    UITableViewCell点击不能push解决方法
    Sublime Text3学习参考集
    Mac搭建学习PHP环境
    Xcode里如何修改类的名字
    Xib中设置控件的圆角、边框效果
    MarkDown的使用
    iOS UItextView监听输入特定字符跳转页面选择选项返回
    创建podspec文件,为自己的项目添加pod支持
    iOS单例模式
  • 原文地址:https://www.cnblogs.com/WArobot/p/6837917.html
Copyright © 2011-2022 走看看