双向跳跃 (jump.cpp\c\pas)

双向跳跃 (jump.cpp\c\pas)

【问题描述】
小丁向n对双胞胎学习了n个双向跳跃技能。
假设小丁的坐标为(x,y),一个双向跳跃技能表示为(a,b),那么当小丁发动该技能时,他可以选择跳到坐标(x+a,y+b)或(x-a,y-b)。(前者为正向跳跃,后者为反向跳跃)
小丁自从学会了这些跳跃技能,就整天跳来跳去。
双胞胎们看不下去了,他们将小丁扔到一个试炼场,并对这块空间设定了一个规则:小丁的每个技能必须依次发动且只能发动一次,直到所有的技能都发动完毕,出口才会打开。我们可以把试炼场看作一个无限大的平面,小丁一开始被扔到坐标(0,0),以坐标(0,0)为圆心,R=1.42*106为半径的圆内是安全区,安全区外有着密密麻麻的怪物,出口将会在安全区内某处打开。显然,小丁若待在安全区外是无法活着回去的,但这并不意味着小丁不能在安全区外跳跃,他可以在怪物咬上他之前发动下一个技能跳到下一个地方,因此,他只需要保证当他把n个技能都用完之后,他仍待在安全区内,这样他就能成功找到出口。
小丁掏出无线通讯器,向你场外求助。理论上你应该会帮他。

【输入格式】
第1行一个正整数n;
第2到第n+1行每行两个整数ai,bi表示一个双向跳跃技能(-106 ≤ ai,bi ≤ 106)。

【输出格式】
一行n个整数ci,ci = 1表示第i个技能选择正向跳跃,ci = -1表示第i个技能选择反向跳跃。显然可行的答案会有很多(保证有解),你只需要给出一组即可。

【输入输出样例】
jump1.in

3
1000000 0
0 1000000
-1000000 0

jump1.out
1
1
1

jump2.in
8
-67761 603277
640586 -396671
46147 -122580
569609 -2112
400 914208
131792 309779
-850150 -486293
5272 721899
jump2.out
1
1
1
1
1
1
1
-1

【数据范围】
数据编号 分值 约束条件 备注
1 19 1 ≤ n ≤ 20

2 27 1 ≤ n ≤ 2000

3 23 1 ≤ n ≤ 500000 数据保证随机
4 31 1 ≤ n ≤ 500000

对于100%的数据1 ≤ n ≤ 500000,-106 ≤ ai,bi ≤ 106

信息

难度
10
分类
(无)
标签
递交数
5
已通过
0
通过率
0%
被复制
2
上传者