您的位置:首页 > 其它

CodeForces - 850A Five Dimensional Points 数学+暴力

2017-11-09 15:18 288 查看
题意:

找到所有good点,,这个点 满足的条件是对于其他的任意两点,角度不是锐角

思路:

我们可以确定如果某个点是 good 点的话,其他的点肯定是 bad 点,还有判断两点是否是 直角或者钝角的时候 可看题解中方法

因为不管他是几维坐标,选出来的三个点一定是共平面了,形成的角度也是0 - 180 度,,所以 cos 值 也满足正负的相关关系,

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1000 + 7, maxd = (1<<18)-1, mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;

int m;
bool vis[maxn];
set<int> st;

struct node {
int a, b, c, d, e;
}n[maxn];

bool is_ok(int a, int b, int c) {
int a1 = n[b].a - n[a].a;
int b1 = n[b].b - n[a].b;
int c1 = n[b].c - n[a].c;
int d1 = n[b].d - n[a].d;
int e1 = n[b].e - n[a].e;

int a2 = n[c].a - n[a].a;
int b2 = n[c].b - n[a].b;
int c2 = n[c].c - n[a].c;
int d2 = n[c].d - n[a].d;
int e2 = n[c].e - n[a].e;

if(a1*a2 + b1*b2 + c1*c2 + d1*d2 + e1*e2 <= 0) {
vis[b] = true;
vis[c] = true;
return true;
}
return false;

}

int main() {

scanf("%d", &m);
for(int i = 0; i < m; ++i) {
scanf("%d %d %d %d %d", &n[i].a, &n[i].b, &n[i].c, &n[i].d, &n[i].e);
}
memset(vis, 0, sizeof vis);
for(int i = 0; i < m; ++i) {
if(vis[i]) continue;
int f = 0;
for(int j = 0; j < m; ++j) {
if(i == j) continue;
for(int k = 0; k < m; ++k) {
if(k == i || k == j) continue;
if(!is_ok(i, j, k)) { f = 1; }
}
}
if(!f) st.insert(i);
}
cout << st.size() << endl;
for(set<int>::iterator it = st.begin(); it != st.end(); ++it) {
printf("%d\n", *it+1);
}

return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: