题目描述

For a vector v⃗=(x,y) \vec{v} = (x, y) v=(x,y) , define ∣v∣=x2+y2 |v| = \sqrt{x^2 + y^2} ∣v∣=x2+y2​ .

Allen had a bit too much to drink at the bar, which is at the origin. There are n n n vectors v1⃗,v2⃗,⋯,vn⃗ \vec{v_1}, \vec{v_2}, \cdots, \vec{v_n} v1​​,v2​​,⋯,vn​​ . Allen will make n n n moves. As Allen's sense of direction is impaired, during the i i i -th move he will either move in the direction vi⃗ \vec{v_i} vi​​ or −vi⃗ -\vec{v_i} −vi​​ . In other words, if his position is currently p=(x,y) p = (x, y) p=(x,y) , he will either move to p+vi⃗ p + \vec{v_i} p+vi​​ or p−vi⃗ p - \vec{v_i} p−vi​​ .

Allen doesn't want to wander too far from home (which happens to also be the bar). You need to help him figure out a sequence of moves (a sequence of signs for the vectors) such that his final position p p p satisfies ∣p∣≤1.5⋅106 |p| \le 1.5 \cdot 10^6 ∣p∣≤1.5⋅106 so that he can stay safe.

输入输出格式

输入格式:

The first line contains a single integer n n n ( 1≤n≤105 1 \le n \le 10^5 1≤n≤105 ) — the number of moves.

Each of the following lines contains two space-separated integers xi x_i xi​ and yi y_i yi​ , meaning that vi⃗=(xi,yi) \vec{v_i} = (x_i, y_i) vi​​=(xi​,yi​) . We have that ∣vi∣≤106 |v_i| \le 10^6 ∣vi​∣≤106 for all i i i .

输出格式:

Output a single line containing n n n integers c1,c2,⋯,cn c_1, c_2, \cdots, c_n c1​,c2​,⋯,cn​ , each of which is either 1 1 1 or −1 -1 −1 . Your solution is correct if the value of p=∑i=1ncivi⃗ p = \sum_{i = 1}^n c_i \vec{v_i} p=∑i=1n​ci​vi​​ , satisfies ∣p∣≤1.5⋅106 |p| \le 1.5 \cdot 10^6 ∣p∣≤1.5⋅106 .

It can be shown that a solution always exists under the given constraints.

输入输出样例

输入样例#1:

3
999999 0
0 999999
999999 0
输出样例#1:

1 1 -1
输入样例#2:

1
-824590 246031
输出样例#2:

1
输入样例#3:

8
-67761 603277
640586 -396671
46147 -122580
569609 -2112
400 914208
131792 309779
-850150 -486293
5272 721899
输出样例#3:

1 1 1 1 1 1 1 -1

Solution:

  本题很玄学,正解不会,直接随机。

  用random_shuffle去随机打乱数组,然后贪心,对于第$i$个向量直接在$+1,-1$中选一个使向量长度小的,然后判断向量和的长度是否满足条件就好了。

代码:

 #include<bits/stdc++.h>
#define il inline
#define ll long long
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int N=;
const ll T=*1ll*;
ll ans[N];
ll n;
struct node{
ll id,x,y;
}a[N]; il int gi(){
int a=;char x=getchar();bool f=;
while((x<''||x>'')&&x!='-')x=getchar();
if(x=='-')x=getchar(),f=;
while(x>=''&&x<='')a=(a<<)+(a<<)+x-,x=getchar();
return f?-a:a;
} il ll lala(ll x,ll y){return x*x+y*y;} int main(){
srand(time());
n=gi();
For(i,,n) a[i].x=gi(),a[i].y=gi(),a[i].id=i;
ll x,y;
while(){
random_shuffle(a+,a+n+);
x=,y=;
For(i,,n)
if(lala(x-a[i].x,y-a[i].y)<lala(a[i].x+x,a[i].y+y)) ans[a[i].id]=-,x-=a[i].x,y-=a[i].y;
else ans[a[i].id]=,x+=a[i].x,y+=a[i].y;
if(lala(x,y)<=T) {For(i,,n) printf("%lld ",ans[i]);break;}
}
return ;
}
 

CF995C Leaving the Bar的更多相关文章

  1. Codeforces 996E Leaving the Bar (随机化)

    题目连接:Leaving the Bar 题意:给你n个向量,你可以加这个向量或减这个向量,使得这些向量之和的长度小于1.5e6. 题解: 按照正常的贪心方法,最后的结果有可能大于1.5e6 .这里我 ...

  2. CodeForcesdiv1:995C - Leaving the Bar(随机算法+贪心)

    For a vector →v=(x,y)v→=(x,y), define |v|=√x2+y2|v|=x2+y2. Allen had a bit too much to drink at the ...

  3. [Codeforces995C]Leaving the Bar 瞎搞

    大致题意: 给出平面上n个向量,对于每个向量可以选择正的V或负的-V,求按照选择的向量走完,最后距离原点<=1.5*1e6的一个选择方案 非正解!!!!!!!!!! 先按距离原点距离由远到近贪心 ...

  4. 【Codeforces】Codeforces Round #492 (Div. 2) (Contest 996)

    题目 传送门:QWQ A:A - Hit the Lottery 分析: 大水题 模拟 代码: #include <bits/stdc++.h> using namespace std; ...

  5. ural 2013 Neither shaken nor stirred

    2013. Neither shaken nor stirred Time limit: 1.0 secondMemory limit: 64 MB The ACM ICPC regional con ...

  6. Customizing Navigation Bar and Status Bar

    Like many of you, I have been very busy upgrading my apps to make them fit for iOS 7. The latest ver ...

  7. Android设计和开发系列第二篇:Action Bar(Develop—API Guides)

    Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an ...

  8. scala - multiple overloaded alternatives of method bar define default arguments

    同名同位置默认参数不能overload def bar(i:Int,s:String="a"){} def bar(i:String,s:String="b") ...

  9. 编程中Foo, Bar 到底什么意思?

    1 前言 在很多国外计算机书本和一些第三份开源软件的Demo中经常用到两个英文单词Foo,Bar.这到底是什么意思呢?从步入屌丝界的IT生活见到这两个单词到现在我还是不知道这两个单词的真正含义,今天有 ...

随机推荐

  1. 北京Uber优步司机奖励政策(10月12日~10月18日)

    用户组:优步北京人民优步A组(适用于10月12日-10月18日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万 ...

  2. 佛山Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. Javascript闭包例子

    闭包的概念 内层的函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止.可理解为,闭包就是能够读取其他函数内部变量的函数. 表现形式是:定义在函数内部的函数. function f1() ...

  4. JS日期转换

    用js将从后台得到的时间戳(毫秒数)转换为想要的日期格式 得到后台从数据库中拿到的数据我们希望格式是 2016年10月25日 17时37分30秒 或者 2016/10/25 17:37:30 然而我们 ...

  5. hive自定义函数——hive streaming

    Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令.脚本语言或其他编程语言来实现Mapper和 Reducer,Streaming方式是基于 ...

  6. gitlab改root密码

    1. ~$ sudo gitlab-rails console production 2.查询要改的用户 irb(main)::> u = User.where().first => #& ...

  7. InnoDB锁冲突案例演示(续)

      Preface       I've demontstrated several InnoDB locking cases in my previous blog.I'm gonna do the ...

  8. 「日常训练」Case of Matryoshkas(Codeforces Round #310 Div. 2 C)

    题意与分析(CodeForces 556C) 为了将所有\(n\)个娃娃编号递增地串在一起(原先是若干个串,每个串是递增的), 我们有两种操作: 拆出当前串中最大编号的娃娃(且一定是最右边的娃娃). ...

  9. Python学习笔记(一)一一一环境安装错误总结

    第三方库安装 1   windows存在多个版本的python,pip安装Python库失败 解决方案:进入对应官网下载安装包,步骤:1 下载安装包到C:\Python36\Lib\site-pack ...

  10. 内置方法(item系列)

    class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # 获取时触发 print('get ...