USACO 2013 NOV SILVER
一、题目概览
中文题目名称 |
未有的奶牛 |
农场航线 |
贝西洗牌 |
英文题目名称 |
nocow |
vacation |
shuffle |
可执行文件名 |
nocow |
vacation |
shuffle |
输入文件名 |
nocow.in |
vacation.in |
shuffle.in |
输出文件名 |
nocow.out |
vacation.out |
shuffle.out |
每个测试点时限 |
1秒 |
1秒 |
1秒 |
测试点数目 |
10 |
10 |
10 |
每个测试点分值 |
10 |
10 |
10 |
比较方式 |
全文比较 |
全文比较 |
全文比较 |
二、运行内存限制
运行内存上限 |
128 M |
128 M |
128 M |
1.未有的奶牛{nocow}
【问题描述】
FJ喜欢收集不同的奶牛,他将未有的N(1 <= N <= 100)头奶牛用如下的形式描述:
Farmer John has no large brown noisy cow.
Farmer John has no small white silent cow.
Farmer John has no large spotted noisy cow.
每一行,描述一头FJ未有的牛。
每一行都含有相同个数的形容词,每行的形容词个数范围为2..30。
在以上给出的列表中,每行共有3个形容词,第一个形容词有两种(large和small),第二个形容词有3种(brown,white和spotted),第三个形容词有2种(noisy和silent)。
所以共可以组成12头不同的奶牛,除了列表给出的3头,他已经拥有了其他9头。FJ最多有1,000,000,000头牛。
若将FJ已经拥有的牛按形容词的字典序排序,请问他已有的第K头牛是哪一头。
【文件输入】
第一行,两个整数N和K。
接下来2..N+1行,每行一条描述,表示未有的牛。每个形容词最多包含10个小写字母。
【文件输出】
输出共一行,若干个形容词。
【输入样例】
3 7
Farmer John has no large brown noisy cow.
Farmer John has no small white silent cow.
Farmer John has no large spotted noisy cow.
【输出样例】
small spotted noisy
【样例说明】
已有的牛按字典序排列分别是:
large brown silent
large spotted silent
large white noisy
large white silent
small brown noisy
small brown silent
small spotted noisy
small spotted silent
small white noisy
2. 农场航线{ vacation }
【问题描述】
有N(1 <= N <= 200)个农场,用1..N编号。航空公司计划在农场间建立航线。对于任意一条航线,选择农场1..K中的农场作为枢纽(1 <= K <= 100, K <= N)。
当前共有M (1 <= M <= 10,000)条单向航线连接这些农场,从农场u_i 到农场 v_i, 将花费 d_i美元。(1 <= d_i <= 1,000,000).
航空公司最近收到Q (1 <= Q <= 10,000)个单向航行请求。第i个航行请求是从农场a_i到农场 b_i,航行必须经过至少一个枢纽农场(可以是起点或者终点农场),因此可能会多次经过某些农场。
请计算可行航行请求的数量,及完成所有可行请求的总费用。
【文件输入】
第一行,四个整数N, M, K和 Q。
接下来2到M+1行,第i+1行包含三个整数u_i, v_i和d_i。
接下来2+M到1+M+Q行: 第1+M+i行表示第i个航行请求。
【文件输出】
第一行,一个整数,表示可行的航行请求数量。
第二行,一个整数,表示完成所有可行航行请求的总费用。
【输入样例】
3 3 1 3
3 1 10
1 3 10
1 2 7
3 2
2 3
1 2
【输出样例】
2
24
【样例说明】
第一个请求花费17,第二个请求不可行,第三个请求花费7,总花费24。
3.贝西洗牌{shuffle}
【问题描述】
贝西有一种独门的洗牌方法,称为贝西洗A:
贝西洗A:将一堆共M (2 <= M <= 100,000)张从上到下编号1..M的纸牌,从上到下第i张牌洗到位置p[i]。例M=3,P[1]=3,p[2]=1,p[3]=2,则执行一次洗法A后,从上到下将变为2,3,1,即牌1放到位置3,牌2放到位置1,牌3放到位置2。
贝西现在要练习另外一种更强的洗牌方法,称为贝西洗B,他有一堆N (M <= N <= 100,000)张编号为1..N的牌,并按从上到下1到N的顺序堆放。另有一个堆用来辅助洗牌,称为临时堆,开始时为空。
贝西洗B:(1)将最上面M张牌进行贝西洗A,(2)将最上面的一张牌放到临时堆的最上方;重复(1)(2)操作,直到原先的堆没有牌为止。
以上过程中,当原先堆的牌不足M张的时候,将不进行贝西洗A,而是将最上面的牌依次放到临时堆上。
现在有Q个询问,求临时堆中Qi位置上的牌的编号。
【文件输入】
第一行,三个空格间隔的整数N,M和Q。
第2..1+M行,描述数组P。
第2+M..1+M+Q行, 每行一个整数,表示Qi。
【文件输出】
Q行,每行一个整数,表示第Qi张牌的编号。
【输入样例】
5 3 5
3
1
2
1
2
3
4
5
【输出样例】
4
5
3
1
2
【样例说明】
[1, 2, 3, 4, 5] -> [2, 3, 1, 4, 5] (2 放到临时堆)
[3, 1, 4, 5] -> [1, 4, 3, 5] (1放到临时堆)
[4, 3, 5] -> [3, 5, 4] (3放到临时堆)
[5, 4] (5放到临时堆)
[4] (4放到临时堆)