Codeforces Round #492 (Div. 2)E. Leaving the Bar

2019-04-14 08:58发布

class="markdown_views prism-github-gist">

链接

http://codeforces.com/contest/996/problem/E

题目大意

给你n" role="presentation">n个向量,长度都小于106" role="presentation">106,让你确定每个向量的符号,使得他们最后加起来长度小于1.5×106" role="presentation">1.5×106

算法雏形

网上都是什么随机化+贪心,太玄学了,虽然也不错,但我还是喜欢非玄学算法。
三个向量分成一组,每个向量取正负就能变成两个向量;六个向量中选出两个向量,最小夹角满足θ[0,60]" role="presentation">θ[0,60],假设拥有最小夹角的两个向量为x,y" role="presentation">x,y,那么|x|,|y|106" role="presentation">|x|,|y|106
|xy|=|x|2+|y|22|x||y|cosθ" role="presentation">|xy|=|x|2+|y|22|x||y|cosθ
cosθ[12,1]" role="presentation">cosθ[12,1]
2|x||y|cosθ[2|x||y|,|x||y|]" role="presentation">2|x||y|cosθ[2|x||y|,|x||y|]
|xy|[|x|2+|y|22|x||y|,|x|2+|y|2|x||y| ]" role="presentation">