您的位置:首页 > 其它

CrodeForces 850A--#432 Div2 C

2017-09-07 23:54 375 查看
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <list>
#define INF 0x3f3f3f
#define maxn 1050
#define juzheng 300

#define ll long long

using namespace std;

//Date:2017-9-5
//Author:HarryBlackCat

int n,point[maxn][10],dis[maxn][50];
bool flag;
vector<int> ans;

void init(){
memset(point,0,sizeof(point));
memset(dis,0,sizeof(dis));
ans.clear();
}

int main(){
while(~scanf("%d",&n)){
init();

for(int i = 1;i <= n;i++)
for(int j = 1;j <= 5;j++)
scanf("%d",&point[i][j]);

if(n > 11){//我五维空间中最多有10个点可能为钝角,大于11肯定会出现锐角所以直接输出0
cout << 0 << endl;
continue;
}

flag = true;
for(int i = 1;i <= n;i++){//从第一个点开始遍历
flag = true;

for(int j = 1;j <= n;j++){
if(j == i)//跳过自己
continue;

for(int k = 1;k <= 5;k++)
dis[j][k] = point[j][k] - point[i][k];//计算ij的向量

for(int k = 1;k < j;k++){//判断ij与ik是否成钝角
if(k == i)//跳过自己
continue;

int sum = 0;
for(int l = 1;l <= 5;l++)
sum += dis[k][l] * dis[j][l];//计算值判断是否为钝角

if(sum <= 0)//为钝角继续判断
continue;
else{//为锐角跳出循环,并标记为坏点
flag = false;
break;
}
}

if(!flag)//标记为坏点
break;
}

if(flag)//标记好点
ans.push_back(i);
}
int len = ans.size();
printf("%d\n",len);
for(int i = 0;i < len;i++)
printf("%d\n",ans[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: