• 【推导】【暴力】Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017) C. Five Dimensional Points


    题意:给你五维空间内n个点,问你有多少个点不是坏点。

    坏点定义:如果对于某个点A,存在点B,C,使得角BAC为锐角,那么A是坏点。

    结论:如果n维空间内已经存在2*n+1个点,那么再往里面添加任意多个点,就会导致所有点都变成坏点。

    容易看出来(?),把2*n+1个点分别放在原点处和每个坐标轴的正负半轴上各一个比较优。

    所以n>11时,直接输出零,否则暴力枚举。

    #include<cstdio>
    using namespace std;
    typedef long long ll;
    struct Point{
    	ll v,w,x,y,z;
    	Point(const ll &v,const ll &w,const ll &x,const ll &y,const ll &z){
    		this->v=v;
    		this->w=w;
    		this->x=x;
    		this->y=y;
    		this->z=z;
    	}
    	Point(){}
    	void read(){
    		scanf("%I64d%I64d%I64d%I64d%I64d",&v,&w,&x,&y,&z);
    	}
    }p[1011];
    typedef Point Vector;
    Vector operator - (const Point &a,const Point &b){
    	return Vector(a.v-b.v,a.w-b.w,a.x-b.x,a.y-b.y,a.z-b.z);
    }
    ll dot(const Vector &a,const Vector &b){
    	return a.x*b.x+a.y*b.y+a.z*b.z+a.v*b.v+a.w*b.w;
    }
    int n,e,anss[1011];
    int main(){
    //	freopen("c.in","r",stdin);
    	scanf("%d",&n);
    	if(n>11){
    		puts("0");
    		return 0;
    	}
    	for(int i=1;i<=n;++i){
    		p[i].read();
    	}
    	for(int i=1;i<=n;++i){
    		bool flag=1;
    		for(int j=1;j<=n;++j){
    			bool f2=1;
    			for(int k=1;k<=n;++k){
    				if(i!=j && j!=k){
    					if(dot(p[j]-p[i],p[k]-p[i])>0){
    						f2=0;
    						break;
    					}
    				}
    			}
    			if(!f2){
    				flag=0;
    				break;
    			}
    		}
    		if(flag){
    			anss[++e]=i;
    		}
    	}
    	printf("%d
    ",e);
    	if(e){
    		for(int i=1;i<e;++i){
    			printf("%d ",anss[i]);
    		}
    		printf("%d
    ",anss[e]);
    	}
    	return 0;
    }
  • 相关阅读:
    自动装箱和==和equals
    4.1 java 类加载器
    23种设计模式
    ionic2打包 配置路径
    ionic2 native app 更新用户头像暨文件操作
    Spring Security三种认证
    maven设置本地仓库地址和设置国内镜像
    ps选框工具全解
    最长公共子序列问题
    内部排序算法的稳定性
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7478193.html
Copyright © 2020-2023  润新知