题目描述

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优步司机奖励政策(11月2日~11月8日)

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

  2. plsql解决中文乱码

    进入 我的电脑,属性,高级,环境变量,添加2项: 1.LANG=zh_CN.GBK 2.NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  3. 【原创】linux命令-Axel命令 - linux多线程下载 - 费元星 - 未来星开发团队

    [费元星版权Q:9715234] Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续[费元星版权Q:9715234]传,且可以从多个地址或者从一个地址的多个连接 ...

  4. mysql 常用语句使用

    1.查询语句 SELECT * FROM table 2.更改语句 UPDATE table SET name = '123456' WHERE id = 100 3.插入语句 INSERT INTO ...

  5. eclipse导入jmeter3.1源码并运行

    jmeter3.1源码地址:https://archive.apache.org/dist/jmeter/source/ 1.打开eclipse,新建一个java project的项目,并点击next ...

  6. editText设置最大长度

    xml中可以设置为: <EditText android:layout_width = "fill_parent" android:layout_height = " ...

  7. java 的原型模式和clone

    原型模式是一种创建型设计模式,在java中可以直接调用object.clone(). 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多 ...

  8. 【forEach控制器】-(针对,在不知道取到得参数有多少?但是要全部执行每一条的情况)

    1.使用json提取器,提取全部参数 2.设置forEach控制器,他会自己把json提起器,取到得所有值,全部使用一次再停止. z

  9. JDK源码分析:Integer.java部分源码解析

    1)声明部: public final class Integer extends Number implements Comparable<Integer> extends Number ...

  10. [Clr via C#读书笔记]Cp5基元类型引用类型值类型

    Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...