列表

详情


NC53271. 防壁

描述

译自 JOISC 2015 Day4 T3「防壁」,感谢 PoPoQQQ 提供翻译。
你入手了一款JOI社发售的游戏。你对这款游戏十分上手,每天玩得不亦乐乎。
某一天,玩家之中出现了一个叫做「镭射」的关卡。这个关卡十分的难,连老司机玩家也只有很低的概率才能通过。正在三番五次挑战这个关卡的你,很快判断出通过的可能性是存在的,并考虑写一个程序来计算出对策。
镭射关卡在一个配置有N个防壁的地形上进行。地形为长方形,分成了一些的正方形区域。每个区域可以用两个非负整数(x,y)表示,左下角的区域为(0,0),(x,y)表示(0,0)往右数x个区域,再往上数y个区域的位置。
关卡开始后,敌人会出现并顺次进行M轮攻击。第j次攻击时,敌人将会从区域向区域(P_j,0)进行直线镭射射击。
每个防壁放在y坐标相同的一些连续的区域中。防壁是左右长度为,上下宽度为1的长方形,初始位置为(A_i,i)(B_i,i)的所有区域。在敌人开始攻击之前以及两次攻击的间隙,你可以任意次地左右移动防壁。一次移动可以让防壁向右移动一个区域,或者向左移动一个区域。
镭射在穿过一个防壁后威力会减少。现在为了将镭射的威力最小化,需要移动防壁使得镭射能穿过所有的防壁。你想让移动防壁的次数尽量少。
现在给出关卡开始时每个防壁的位置,以及每个敌人的攻击位置,为了让每一发镭射都穿过所有的防壁,请你输出每个防壁移动次数的最小值。

输入描述

第一行两个空格分隔的整数N,M,表示这个关卡有N个防壁,敌人将会进行M轮攻击。
接下来N行,第i行有两个空格分隔的整数A_i,B_i,表示关卡开始时防壁i被放置在(A_i,i)(B_i,i)的所有区域的位置上。
接下来M行,第j行有一个整数P_j,表示第j次攻击时,敌人从(P_j,0)进行直线镭射射击。

输出描述

输出N行,第i行表示防壁i的移动次数的最小值。

示例1

输入:

4 4
0 3
4 4
2 7
8 11
6
4
3
8

输出:

5
10
1
7

说明:

在这个输入中,使防壁的移动次数最少的移动方法之一如下:
对于第一轮攻击,防壁1向右移动3次,防壁2向右移动2次,防壁3不动,防壁4向左移动2次;
对于第二轮攻击,防壁1不动,防壁2向左移动2次,防壁3不动,防壁4向左移动2次;
对于第三轮攻击,防壁1不动,防壁2向左移动1次,防壁3不动,防壁4向左移动1次;
对于第四轮攻击,防壁1向右移动2次,防壁2向右移动5次,防壁3向右移动1次,防壁4向右移动2次;
在这种移动方式中,防壁1移动了5次,防壁2移动了10次,防壁3移动了1次,防壁4移动了7次。
wall.png

示例2

输入:

7 11
12 39
22 23
5 38
6 47
10 43
0 50
18 46
38
19
15
1
12
29
29
0
6
40
6

输出:

34
178
13
6
18
0
36

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

上一题