模拟一
T1 旅行
时间限制:1000ms
空间限制:256MiB
题目背景
「奶龙」正在环球旅行!但是它的身份证件马上就要过期了。于是,它不得不考虑旅行的方法,因为没有身份证件是无法乘坐飞机的。
然而,由于「奶龙」国错综复杂的地形,「奶龙」一时间弄不明白怎么出行才好。因此,它想问问聪明绝顶的你,能不能帮它找到最快到达目的地的方法。
题目描述
在「奶龙」国中,有 \(n\) 个城市,分别编号 \(1 \sim n\)。在若干城市中有一个派出所,可以办理身份证件。具体地,在编号为 \(i\) 的城市中,办理身份证件需要 \(a_i\) 天,在办理完成后的 \(b_i\) 天内身份证件都有效,如果这个城市没有派出所则 \(a_i = b_i = -1\)。
此外,「奶龙」国中还有 \(m\) 条单向的道路,分别编号 \(1 \sim m\),编号为 \(i\) 的道路的方向是从编号为 \(u_i\) 的城市到编号为 \(v_i\) 的城市。坐飞机经过编号为 \(i\) 的道路需要花费 \(p_i\) 天的时间,而走路经过则需要 \(w_i\) 天。不过,只有你在起飞时身份证件还有效,才能乘坐飞机经过一条道路。注意,身份证件有效期剩余 \(0\) 天不算有效。
「奶龙」初始在编号为 \(1\) 的城市中,身份证件的有效期还有 \(t\) 天。请问它到达编号为 \(1 \sim n\) 的城市,分别最少需要多少天?如果无法到达则输出 \(-1\)。
输入格式
第一行三个整数 \(n, m, t\),表示城市数、道路数以及身份证件有效期。
接下来 \(n\) 行,每行两个整数 \(a_i, b_i\),表示编号为 \(i\) 的城市中办理证件用时和证件有效期。特别地,\(a_i = b_i = -1\) 表示该城市没有派出所。
在接下来 \(m\) 行,每行四个整数 \(u_i, v_i, p_i, w_i\),表示编号为 \(i\) 的道路的起点、终点、乘坐飞机用时以及走路用时。
输出格式
输出一行 \(n\) 个整数,第 \(i\) 个整数表示到达编号为 \(i\) 的城市最少消耗的天数。特别地,无法到达则输出 \(-1\)。
输入样例
5 5 3
-1 -1
4 3
3 3
-1 -1
-1 -1
1 2 5 5
1 3 3 6
3 2 1 5
2 4 5 8
4 3 2 8
输出样例
0 5 3 12 -1
说明/提示
样例 1 解释
下面给出一种可能的最优解。
目的地是编号为 \(1\) 的节点:啥也不做,耗时 \(0\) 天。
目的地是编号为 \(2\) 的节点:坐飞机经过编号为 \(1\) 的边,耗时 \(5\) 天。
目的地是编号为 \(3\) 的节点:坐飞机经过编号为 \(2\) 的边,耗时 \(3\) 天。
目的地是编号为 \(4\) 的节点:坐飞机经过编号为 \(2\) 的边,办理身份证件,坐飞机经过编号为 \(3\) 的边,坐飞机经过编号为 \(4\) 的边,总耗时 \(12\) 天。
样例 2
见选手目录下的 travel/travel2.in 与 travel/travel2.ans。
该组样例满足 \(n \le 5, m \le 10\)。
样例 3
见选手目录下的 travel/travel3.in 与 travel/travel3.ans。
该组样例满足 \(n \le 100, m \le 300\)。
样例 4
见选手目录下的 travel/travel4.in 与 travel/travel4.ans。
该组样例满足对于所有 \(1 \le i \le m\),\(p_i = w_i\)。
样例 5
见选手目录下的 travel/travel5.in 与 travel/travel5.ans。
该组样例满足不存在派出所。
样例 6
见选手目录下的 travel/travel6.in 与 travel/travel6.ans。
该组样例满足存在恰好一所派出所。
样例 7
见选手目录下的 travel/travel7.in 与 travel/travel7.ans。
该组样例满足 \(t = 0\)。
样例 8
见选手目录下的 travel/travel8.in 与 travel/travel8.ans。
数据范围
对于前 \(10\%\) 的测试点,满足 \(n \le 5, m \le 10\)。
对于前 \(30\%\) 的测试点,满足 \(n \le 100, m \le 300\)。
对于另外 \(10\%\) 的测试点,满足对于所有 \(1 \le i \le m\),\(p_i = w_i\)。
对于另外 \(10\%\) 的测试点,满足不存在派出所。
对于另外 \(20\%\) 的测试点,满足存在恰好一所派出所。
对于另外 \(10\%\) 的测试点,满足 \(t = 0\)。
对于 \(100\%\) 的测试点,满足 \(1 \le n \le 500, 1 \le m \le 2000, 1 \le u_i, v_i \le n, 1 \le p_i \le w_i \le 10^9\),\(0 \le t \le 10^9\)。
特别地,对于所有 \(1 \le i \le n\),\(a_i = b_i = -1\) 或 \(1 \le a_i, b_i \le 10^9\) 。不保证没有重边或自环。
T2 解谜
时间限制:1000ms
空间限制:256MiB
题目背景
「奶龙」喜欢玩解谜游戏!一天,它玩到了一款规则怪异的游戏,花了非常久都没有做出来!这使它不禁思考:这个盘面真的有解吗?
它无法回答自己的问题,于是找到了你,想让你帮忙。
题目描述
有一个 \(n\) 行 \(m\) 列的网格,每个格子要么是空格(没有卡牌),要么放有一张卡牌。卡牌分为两种:左箭头和右箭头。初始时,所有格子都处于未激活状态。
你需要通过若干次操作,使所有格子最终都被激活。一次操作的流程如下:
- 选择一张卡牌,要求它当前所在的格子尚未被激活。将这张卡牌拿起(原位置变为空格)。
- 选择一个空格(可以是刚拿起卡牌后空出的那个格子),把卡牌放到这个格子上。
- 根据卡牌的方向,定义本次操作的关键格子:
- 若卡牌为左箭头,则关键格子为放置格及其同一行中所有位于它左边的格子;
- 若卡牌为右箭头,则关键格子为放置格及其同一行中所有位于它右边的格子。
- 在卡牌放下之前,必须保证:上述所有关键格子当前都既是空格,又处于未激活状态。如果不满足,则本次操作非法,不能执行。
- 若操作合法,则放下卡牌,并将所有关键格子标记为已激活(包括放置格——即使它现在放有卡牌,也算作已激活;其他关键格子则保持空格但变为已激活)。
请你求出一组合法的操作序列并输出它。如果无解输出 \(-1\)。
输入格式
本题有多组测试数据。
输入的第一行包含一个正整数 \(T\),表示数据组数。
接下来包含 \(T\) 组数据,每组数据的格式如下:
第一行两个正整数 \(n, m, k\),表示方格的行数,列数以及卡牌数。
接下来 \(n\) 行,每行一个长度为 \(m\) 的字符串,保证字符串中只有 <,> 和 .,分别表示左箭头卡牌,右箭头卡牌和空格。保证卡牌的总数为 \(k\)。
输出格式
对于每组数据:
第一行一个整数,表示操作次数。
接下来若干行(行数为第一行输出的操作次数),每行四个整数 \(x_1, y_1, x_2, y_2\),表示将第 \(x_1\) 行 \(y_1\) 列的一张卡牌移动到 \(x_2\) 行 \(y_2\) 列。你需要保证操作是合法的。
特别地,如果数据无解,请输出一个 \(-1\)。如果有多组解,输出任意一组即可。
输入样例
2
3 3 4
<<>
..>
...
3 3 5
>.>
<>.
>..
输出样例
4
2 3 2 3
1 1 2 2
1 3 3 1
1 2 1 3
-1
说明/提示
对于第一组测试数据:
进行第一次操作后,当前网格为:
<<>
..>
...
其中,格子 \((2, 3)\) 作为关键格子被激活。
进行第二次操作后,当前网格为:
.<>
.<>
...
其中,格子 \((2, 1)\) 和 \((2, 2)\) 作为关键格子被激活。
进行第三次操作后,当前网格为:
.<.
.<>
>..
其中,格子 \((3, 1)\), \((3, 2)\) 和 \((3, 3)\) 作为关键格子被激活。
进行第四次操作后,当前网格为:
..<
.<>
>..
其中,格子 \((1, 1)\), \((1, 2)\) 和 \((1, 3)\) 作为关键格子被激活。至此,所有格子都被激活。
对于第二组测试数据:
可以证明不存在一个方案使得所有格子都被激活。
样例 2
见选手目录下的 puzzle/puzzle2.in 与 puzzle/puzzle2.ans。
该组样例满足 \(n, m \le 9\)。
样例 3
见选手目录下的 puzzle/puzzle3.in 与 puzzle/puzzle3.ans。
提示
在本题的目录下已下发自定义校验器,你可以在编译后如下测试你的程序:
checker.exe puzzle.in puzzle.out puzzle.ans
不保证实际评测所用校验器与下发的一致。
数据范围
对于前 \(10\%\) 的测试点,满足 \(n, m \le 4\)。
对于前 \(20\%\) 的测试点,满足 \(n, m \le 9\)。
对于另外 \(15\%\) 的测试点,满足 \(k < 2n\)。
对于另外 \(5\%\) 的测试点,满足 \(m \le 2\)。
对于另外 \(20\%\) 的测试点,保证存在一行的卡牌数量不超过 \(1\)。
对于 \(100\%\) 的测试点,满足 \(1 \le T \le 5, 2 \le n, m \le 10^3, 0 \le k \le nm\)。
T3 灯笼
时间限制:1000ms
空间限制:256MiB
题目背景
马上就是新年了,「奶龙」一家在热热闹闹过大年!
过年,怎么能少得了灯笼呢?只不过,「奶龙」觉得挂着毫无新意的普通红灯笼没有什么意思呢。于是,「奶龙」斥巨资买了两组 DIY 灯笼。
每组 DIY 灯笼包含五个颜色各异的小灯笼,「奶龙」需要把他们依次套到中间的固定杆上并在杆上绑好灯带,这样只要按下开关就能看到五颜六色的灯光啦!
只不过,「奶龙」发现自己买的这两组 DIY 灯笼内部的配色居然是一模一样的。「奶龙」认为,如果这两组灯笼在相同高度上发出了相同颜色的光,那就会非常无聊呢。于是,在串灯笼之余,「奶龙」还想知道有多少种方案能串出不无聊的灯笼。
按照基本惯例,「奶龙」现在应该发现自己不会并向你求助。但是,「奶龙」不是笨蛋!「奶龙」会数数!因此,它发现这是经典板子并秒了这道题。
然而「奶龙」还是不满意。进一步地,他想知道在有三组灯笼的情况下题目的答案是什么样子的。
然而,这被 OEIS 秒了。于是,「奶龙」为每一组灯笼增加了权值。
这下,「奶龙」真的不会了,于是它向你求助,你能帮「奶龙」解决这个问题吗?
题目描述
对于三个长度为 \(n\) 的排列 \(a, b, c\) 组成的三元组,如果对于任意的 \(1 \le i \le n\),满足 \(a_i \neq b_i, a_i \neq c_i\),就称这个三元组合法。
给定两个长度为 \(n\) 的序列 \(u, v\),对于合法的三元组 \((a, b, c)\),我们如下定义一个长度为 \(n\) 的序列 \(d\):
- 如果 \(b_i \neq c_i\),则 \(d_i = u_i\)。
- 如果 \(b_i = c_i\),则 \(d_i = v_i\)。
则这个合法的三元组 \((a, b, c)\) 的权值为 \(\prod d_i\)。
请你求出所有合法的三元组的权值之和,答案对 \(10^9 + 7\) 取模。
输入格式
第一行一个正整数 \(n\),表示排列长度。
第二行 \(n\) 个整数,表示序列 \(u\)。
第三行 \(n\) 个整数,表示序列 \(v\)。
输出格式
一个整数,表示答案。
输入样例
2
1 2
3 4
输出样例
24
说明/提示
样例 2
见选手目录下的 lantern/lantern2.in 与 lantern/lantern2.ans。
该组样例满足 \(n \le 5\)。
样例 3
见选手目录下的 lantern/lantern3.in 与 lantern/lantern3.ans。
该组样例满足 \(n \le 50\)。
样例 4
见选手目录下的 lantern/lantern4.in 与 lantern/lantern4.ans。
该组样例满足 \(n \le 500\)。
样例 5
见选手目录下的 lantern/lantern5.in 与 lantern/lantern5.ans。
数据范围
对于所有数据,满足 \(1 \le n \le 2000\),\(0 \le u_i,v_i < 2^{30}\)。
| 测试点编号 | \(n \le\) |
|---|---|
| \(1\) | \(5\) |
| \(2\) | \(7\) |
| \(3\) | \(10\) |
| \(4 \sim 6\) | \(20\) |
| \(7 \sim 9\) | \(50\) |
| \(10 \sim 12\) | \(150\) |
| \(13 \sim 15\) | \(500\) |
| \(16 \sim 20\) | \(2000\) |
T4 重组
时间限制:1000ms
空间限制:256MiB
题目背景
「奶龙」有一串自己最喜欢的数字!
「奶龙」只要一天看不到这串数字就会非常愤怒然后使用喷火来毁灭整个世界!
但是,严峻的问题出现了!「奶龙」因为在和「布丁」玩游戏的时候被咒术影响忘记了这串数字具体是什么!它只能记得这串数字的个数为 \(n\),数字都是 \(1 \sim n\) 的整数且互不相同。
但是,仅凭这点信息显然无法得到这串数字从而拯救世界。不过万幸的是,「奶龙」为这种特殊情况做了准备。
对于每两个数,「奶龙」按照自己想喷火还是想变色记录下来了它们的最大值或是最小值。这下就容易多了!
但是,这仍然不足以得到这串数字。因此,「奶龙」希望你回答出满足所有约束的,最美丽的排列!
题目描述
给定排列长度 \(n\) 以及约束个数 \(m\),每个约束形如 \((k, i, j, x)\),表示:
- 若 \(k = 0\) 则 \(x = \min(p_i, p_j)\),否则 \(x = \max(p_i, p_j)\)。
你要输出满足所有约束的,字典序最小的排列。特别地,保证大多数 \(x\) 均出现过,详见【数据范围】一章。
数据保证有解。
输入格式
第一行两个正整数 \(n, m\)。
接下来 \(m\) 行,每行 \(4\) 个整数,表示约束的 \((k, i, j, x)\)。
输出格式
输出 \(n\) 个整数,表示答案的排列。
输入样例
3 2
1 1 2 3
0 2 3 1
输出样例
2 3 1
说明/提示
样例 1 解释
合法的排列只有 \([2, 3, 1], [3, 1, 2], [3, 2, 1]\),其中字典序最小的排列是 \([2, 3, 1]\)。
样例 2
见选手目录下的 rebuild/rebuild2.in 与 rebuild/rebuild2.ans。
该组样例满足 \(n, m \le 18\)。
样例 3
见选手目录下的 rebuild/rebuild3.in 与 rebuild/rebuild3.ans。
该组样例满足 \(n, m \le 10^3\)。
样例 4
见选手目录下的 rebuild/rebuild4.in 与 rebuild/rebuild4.ans。
该组样例满足 \(x\) 互不相同。
样例 5
见选手目录下的 rebuild/rebuild5.in 与 rebuild/rebuild5.ans。
数据范围
对于前 \(5\%\) 的测试点,满足 \(n \le 8\)。
对于前 \(10\%\) 的测试点,满足 \(n, m \le 18\)。
对于前 \(20\%\) 的测试点,满足 \(n \le 18\)。
对于前 \(50\%\) 的测试点,满足 \(n \le 300\)。
对于前 \(70\%\) 的测试点,满足 \(n \le 10^3\)。
对于另外 \(10\%\) 的测试点,满足 \(k = 0\)。
对于另外 \(10\%\) 的测试点,满足 \(x\) 互不相同。
对于 \(100\%\) 的测试点,满足 \(1 \le n, m \le 10^5\),\(0 \le k \le 1\),\(1 \le i, j, x \le n\),\(i \neq j\)。
特别地,设 \(1 \sim n\) 中没有出现过的 \(x\) 的个数为 \(s\),保证 \(s \le 1200\)。

浙公网安备 33010602011771号