• Codeforces 850A


    原题链接: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
    %d
    ", 1, 1);
    38             continue;
    39         }
    40         else if(n==2){
    41             printf("%d
    %d
    %d
    ", 2, 1, 2);
    42             continue;
    43         }
    44         else if(n>11){
    45             printf("%d
    ", 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
    ", l);
    64         for(int i=0;i<l;i++)
    65             printf("%d
    ", res[i]+1);
    66     }
    67     return 0;
    68 }

     

  • 相关阅读:
    python二进制转换
    git的使用
    c++primer plus笔记
    c++primer 学习笔记
    二分查找
    字符串全排列
    斐波那契数列
    JavaScript 相关
    HTTP记录
    前端笔记
  • 原文地址:https://www.cnblogs.com/MasterSpark/p/7502616.html
Copyright © 2020-2023  润新知