Codeforces 850A - Five Dimensional Points(暴力)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 850A - Five Dimensional Points(暴力)相关的知识,希望对你有一定的参考价值。
原题链接:http://codeforces.com/problemset/problem/850/A
题意:有n个五维空间内的点,如果其中三个点A,B,C,向量AB,AC的夹角不大于90°,则点A是“bad”的否则是“good”。题目让我们输出good的点。
思路:从2,3维空间超过5,7个点时不存在“good”的点,可以简单推知五维空间内,超过11个点时不存在“good”的点,那么点数小于11时暴力,大于11时输出0.
其实由于数据量小,直接暴力也是可行的。
AC代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<vector> 5 using namespace std; 6 const int MAXN=1005; 7 struct Node{ 8 int a,b,c,d,e; 9 }node[MAXN]; 10 bool pend(Node A, Node B, Node C) 11 { 12 Node AB,AC; 13 AB.a=B.a-A.a; 14 AB.b=B.b-A.b; 15 AB.c=B.c-A.c; 16 AB.d=B.d-A.d; 17 AB.e=B.e-A.e; 18 AC.a=C.a-A.a; 19 AC.b=C.b-A.b; 20 AC.c=C.c-A.c; 21 AC.d=C.d-A.d; 22 AC.e=C.e-A.e; 23 if(AB.a*AC.a+AB.b*AC.b+AB.c*AC.c+AB.d*AC.d+AB.e*AC.e<=0) return 0; 24 return 1; 25 } 26 int main() 27 { 28 int n; 29 while(cin>>n) 30 { 31 32 vector<int> res; 33 for(int i=0;i<n;i++){ 34 scanf("%d %d %d %d %d", &node[i].a, &node[i].b, &node[i].c, &node[i].d ,&node[i].e); 35 } 36 if(n==1){ 37 printf("%d\n%d\n", 1, 1); 38 continue; 39 } 40 else if(n==2){ 41 printf("%d\n%d\n%d\n", 2, 1, 2); 42 continue; 43 } 44 else if(n>11){ 45 printf("%d\n", 0); 46 continue; 47 } 48 bool flag; 49 for(int i=0;i<n;i++){ 50 flag=0; 51 for(int j=0;j<n;j++){ 52 for(int k=j+1;k<n;k++){ 53 if(pend(node[i], node[j], node[k])){ 54 flag=1; 55 j=n+1; 56 break; 57 } 58 } 59 } 60 if(!flag) res.push_back(i); 61 } 62 int l=res.size(); 63 printf("%d\n", l); 64 for(int i=0;i<l;i++) 65 printf("%d\n", res[i]+1); 66 } 67 return 0; 68 }
以上是关于Codeforces 850A - Five Dimensional Points(暴力)的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 680A A. Bear and Five Cards(水题)
Codeforces1575 D. Divisible by Twenty-Five(dp)