ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF850A Five Dimensional Points 题解

2021-10-11 22:04:07  阅读:147  来源: 互联网

标签:GCC return int 题解 复杂度 Dimensional read Points printf


Codeforces
Luogu

Description.

给定 \(n\) 个五维坐标系中的点,找到所有点 \(A\),使得

  • \(\forall B,C\in S,<\overrightarrow{AB},\overrightarrow{AC}>\ge \frac{\pi}{2}\)

Solution0.

\(O(n^3)\) 暴力直接 AC。

Solution1.

假设我们要判断 \(A\) 点是否可行。
考虑以 \(A\) 点为坐标原点建立新的直角坐标系。
把平面分成了 \(2^5=32\) 个象限,如果任意两个点在同一个象限内,则角度必 \(<\frac{\pi}2\)。
所以当 \(n>33\) 时必然有解。
复杂度 \(O(n)\)

Solution2.

考虑三个点构成三角形,必然存在至少两个角是锐角。
考虑维护一个 queue,每次取出队顶然后判断以下,至少可以删掉两个点。
复杂度 \(O(n)\)。

Coding1.

点击查看代码
//是啊,你就是那只鬼了,所以被你碰到以后,就轮到我变成鬼了{{{
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
template<typename T>inline void read(T &x)
{
	x=0;char c=getchar(),f=0;
	for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
	for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	f?x=-x:x;
}
template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}//}}}
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
const int N=1005;int n;
struct $
{
	int a,b,c,d,e;
	inline $ operator-($ x) {return ($){a-x.a,b-x.b,c-x.c,d-x.d,e-x.e};}
	inline int operator*($ x) {return a*x.a+b*x.b+c*x.c+d*x.d+e*x.e;}
}a[N];
int main()
{
	read(n);if(n>=50) {return puts("0"),0;}
	for(int i=1;i<=n;i++) read(a[i].a,a[i].b,a[i].c,a[i].d,a[i].e);
	vector<int>v;for(int i=1;i<=n;i++)
	{
		char fg=1;
		for(int x=1;x<=n&&fg;x++) if(x^i) for(int y=x+1;y<=n&&fg;y++)
			if(y^i) if((a[x]-a[i])*(a[y]-a[i])>0) {fg=0;break;}
		if(fg) v.push_back(i);
	}printf("%d\n",(int)v.size());
	for(auto x:v) printf("%d ",x);
	return 0;
}

标签:GCC,return,int,题解,复杂度,Dimensional,read,Points,printf
来源: https://www.cnblogs.com/pealfrog/p/15395164.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有