Codeforces 851C . Five Dimensional Points 计算几何,结论
2017-09-05 21:23
337 查看
题意
给定n(1000)个5维空间的点,定义坏点a为存在两个不同的点b,c使得ab与ac向量夹角为锐角.定义好点为不是坏点的点.求好点的个数与他们的下标.解法
任意三个点组成一个三角形,其中必有两个或以上的锐角.所以当n>2时好点的个数不会超过1.当n<=2时好点个数为n.考虑2维平面的情况,一个点是好点则它周围最多有4个点(上下左右),大于5个点的情况不可能存在好点.
扩展到五维空间,只有11个点以内才可能存在最多1个好点.枚举即可.
代码
/* LittleFall : Hello! */ #include <bits/stdc++.h> using namespace std; int save[1010][5]; int main(void) { int n; scanf("%d", &n); for(int i = 0; i < n; i++) for(int j = 0; j < 5; j++) scanf("%d", &save[i][j]); if(n > 11) { printf("0\n"); return 0; } if(n <= 2) { printf("%d\n", n ); printf("%s\n", n == 2 ? "1\n2\n" : "1\n" ); return 0; } int goodidx = -1; for(int i = 0; i < n; i++) { int flag = 1; for(int j = 0; j < n; j++) { if(j == i) continue; for(int k = j + 1; k < n; k++) { if(i == k) continue; //检测ij和ik是否成锐角 int pp = 0; for(int x = 0; x < 5; x++) pp += (save[j][x] - save[i][x]) * (save[k][x] - save[i][x]); if(pp > 0) flag = 0; } if(flag == 0) break; } if(flag) goodidx = i; if(goodidx != -1) { printf("1\n%d\n", goodidx + 1); return 0; } } printf("0\n"); return 0; }
相关文章推荐
- 【CodeForces】257C - View Angle(计算几何)
- CodeForces - 231D (计算几何. 水题)
- CodeForces 659 D. Bicycle Race(计算几何 + 数学公式)
- CodeForces 630 P. Area of a Star(计算几何)
- Codeforces 32E Hide-and-Seek 求2点关于镜面反射 计算几何
- codeforces 223E 计算几何 图论 网络流思想
- Codeforces 800B 计算几何
- Codeforces 8D Two Friends 三分+二分+计算几何
- Codeforces 499C:Crazy Town(计算几何)
- ☆ Codeforces 724C Ray Tracing 扩展欧几里得 + 计算几何
- Codeforces 849 B. Tell Your World(计算几何)
- CodeForces 203D Hit Ball 水!计算几何
- Codeforces 1C. Ancient Berland Circus(计算几何:正多边形性质+高精度)
- CodeForces 599 D.Randomizer(计算几何+期望)
- Codeforces 682E 计算几何
- HDU 6055 Regular polygon (计算几何 + 国家队论文结论)
- 1.13 Codeforces 30D Kings Problem 贪心 计算几何
- #51 Codeforces-E. Very simple problem (计算几何)(点被多少个三角形包含)
- codeforces 13D. Triangles(计算几何 dp)
- CodeForces 196 C.Paint Tree(计算几何+递归)