zoukankan      html  css  js  c++  java
  • 【推导】【暴力】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;
    }
  • 相关阅读:
    非985、211毕业,却选择了拒接百度Android开发岗offer?
    第五章:Redis持久化-RDB持久化
    第一章:初识Redis
    第四章:虚拟机监控工具
    第三章:内存分配与回收策略
    第三章:垃圾回收器-参数总结
    第一章:Nginx安装
    第一章:Nginx介绍
    第三章:进程管理-进程描述符及任务结构
    4、跃进表
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7478193.html
Copyright © 2011-2022 走看看