codeforces 851 C (Div#432) Five Dimensional Points

来源:互联网 发布:网络捕鱼平台出租代理 编辑:程序博客网 时间:2024/06/05 09:57

五维下,给出一些点,问多少个点满足:与任意其他两点连线间夹角不为锐角。

先考虑二维下:下面证明当点数超过5个时没有满足题意的点。

任取一个点(记为A1)为坐标系原点建系,假设同一象限内有>=2个点,那么从这些任取两点与圆心连线,夹角为必锐角,所以每个象限只能有一个,所以总数不能超过5个(四个象限+原点)。

类似的,在五维时也必有一个上限n,点数超过n后无解。

那么我们卡复杂度即可(若问题有解,必在要求复杂度内,所以卡在复杂度边界必定正确),设置一个n,大约三百左右即可。

AC代码:

#include<bits/stdc++.h>using namespace std;int main(){int n,cc;int a[2000][10];memset(a, 0, sizeof(a));cc = 0;cin >> n;for (int i = 1;i <= n;i++)for (int j = 1;j <= 5;j++)cin >> a[i][j];if (n >243)cout << "0" << endl;else{for (int i = 1;i <= n;i++){for (int j = 1;j <= n;j++){if (j == i)continue;for (int k = j + 1;k <= n;k++){    long long F=(a[j][1] - a[i][1])*(a[k][1] - a[i][1]) + (a[j][2] - a[i][2])*(a[k][2] - a[i][2]) + (a[j][3] - a[i][3])*(a[k][3] - a[i][3]) + (a[j][4] - a[i][4])*(a[k][4] - a[i][4]) + (a[j][5] - a[i][5])*(a[k][5] - a[i][5]) ;if (F> 0){a[i][0] = 1;break;}}if (a[i][0] == 1)break;}if (a[i][0] == 0)cc++;}cout << cc << endl;for (int i = 1;i <= n;i++)if (a[i][0] == 0) cout << i << endl;}}


阅读全文
0 0
原创粉丝点击