USACO 2001 OPEN
第1题 绿组. 奶牛接力赛[relay]
题目描述
农夫约翰已经为一次赛跑选出了K(2≤K≤40)头牛组成了一支接力队.赛跑在农夫约翰所拥有的农场上进行,农场的编号为1到Ⅳf4≤Ⅳ< 800),Ⅳ个农场之间共有M(1≤M≤4000)条双向道路,每条双向道路连接一对不同的农场,一对不同的农场之间最多只有一条双向道路.你将得到每条牛为了穿过每个道路所需要的时间.比赛的起点设在1号农场,终虑设在Ⅳ号农场,比赛开始后第一头牛开始从1号农场出发,在Ⅳ号农场到达终点.第一头牛结束之后马上就让下一头牛从1号农场开始,跑向Ⅳ号农场,直到所有的牛都跑过一次为止.
作为比赛的规则,任意的2头牛跑过的路线不能完全相同(路线是指跑过的农场的序列).但对某头牛来说它可以经过某个农场多次.写一个程序为农夫约翰的接力队计算所有的牛完成这次比赛所需的最少的时间.可以保证对所有的测试数据要求的最少时间是一定存在的.
输入说明
第1行包含3个整数:K,Ⅳ,M.
从第2行到第M+1行:每行包括描述一条道路的3个整数,分别表示该道路连接的两个农场的编号,以及每条牛穿过这条路所需的时间(范围在[1,9500]).
输出说明
输出文件仅一行,表示这K头奶牛完成接力赛所用的最短时间(假定每单位长度需要花费一单位时间).
输入样例
4 5 8
1 2 1
1 3 2
1 4 2
2 3 2
2 5 3
3 4 3
3 5 4
4 5 6
输出样例
23
样例说明
奶牛1 1~2~5 4
奶牛2 1~3~5 6
奶牛3 1~2_1_2~5 6
奶牛4 1_2_3_5 7
来源信息
Brian Dean.2001
第2题 绿组.重建家园[quake]
题目描述
地震已经破坏了农夫约翰所有的农场以及所有连接农场的道路.作为一个意志坚强的人,他决定重建所有的农场.在重建全部Ⅳ(1≤Ⅳ≤400)个农场之前,首先必须把所有农场用道路连接起来,即任意两个农场之间必须有至少一条通路.在研究了地图之后,农夫约翰已经得出了结论:M(1《M≤10000)条双向的道路可以在较短的时间内建造好.由于约翰的资金有限,他想以尽可能便宜的方法完成工程.
碰巧,农场里的奶牛们组建了一个专门从事重新改造在地震中被破坏的农场道路的工程公司,约翰决定把道路重建的工作交给奶牛们去完成.这些牛也有着锐利的商务感觉,它们希望从工程中获得最大的利益.约翰和奶牛们经过协商,约翰愿意拿出F(1≤F≤2×109)元钱给奶牛们用于道路重建.他要求奶牛们把所有农场用道路连接起来,即任意两个农场之间必须有至少一条通路.
奶牛们根据地图估算出了建造每条道路的成本c(l≤c≤2×109)及用时t(l≤t≤2×109). -
对农场之间可以有1条以上可重建道路,并且对于给定的测试数据将所有农场连接起来是能够做到的.
现在奶牛们找到你,要求你编一个程序求出重建农场道路能让奶牛们获得的最大利润率.也就是使得剩余经费与所花时间的比值(赚钱速度)最大.
输入说明
第1行为三个整数Ⅳ,M和F.
第2行到第M+1行,每一行都包括4个用空格隔开的整数:i,j,c,£分别表示可以重建的一条道路的两端连接的农场,以及重建该条道路的成本和时间.
输出说明
包含一个实数,表示剩余经费与所花时间的比值,保留4位小数.如果不可能以现有经费连接所有道路,输出0.0000.
输入样例
5 100
2 20
3 20
4 20
5 20
3 23
输出样例
1. 0625
样例说明
奶牛们可以选择修建最后的四条道路,这样所花经费为83,利润为17,所用时间为16.所以,他们在16单位时间内获利17元,比值为(100-83)/16=1.0625.
来源信息
Chandrasekaran, 1977; Tvarozek, 2001
第3题 绿组.奶牛排序[sort]
题目描述
农夫约翰有C(2≤C≤400)头牛和相同数量的畜栏.
这些牛对于她们畜栏的安排特别反复无常.当她们按随机的顺序进入畜栏的时候,必须按适当的顺序对她们进行重新安排,否则,她们的奶产量将减少.
为了找刭适当的顺序,每头牛都检查其标记(是一个不到2000000的正整数),来保证她右边牛的标记不比自己小,并且在她左边的牛的标记不比自己大.有趣的是,带最小的标记的牛左边的牛却可以带有最大的标记(同样带最大的标记的牛右边的牛可以带有最小的标记).
如果符合上述排列规则,就说牛按适当的顺序排列.注意:这些排列规则是用来描述一系列有序数表的(而不是什么怪异的东西).例如,如果牛的标记是2,2,4,5,7,则畜栏中牛的适当排列可以有以下这几种:
2, 2, 4, 5, 7
7, 2, 2, 4, 5
5, 7, 2, 2, 4
4, 5, 7, 2, 2
2, 4, 5, 7, 2
如果你和牛打过交道,你就知道要移动她们是很难的.为了重新安排这些牛,农夫约翰可以将牛引出畜栏,穿过,进入其他的畜栏.约翰只有两只手,每次至多只能引导2头牛,每个畜栏任何时候最多只能放1头牛.每次把牛引出畜栏,或引入畜栏,约翰都要消耗10焦耳能量.而且,每引导一头牛走过一个畜栏的长度,他也要消耗一焦耳.但如果他不引导牛,而只是独自在畜栏间行走,就不消耗能量.这样,如果他引导两头牛从第3畜栏走到第7畜栏,他将消耗(7-3) x2=8焦耳能量.不带牛独自走回畜栏1则损失0焦耳能量.
请计算:约翰为把牛放入适当的顺序所需耗费的最小能量.
输入说明
第1行一个数C,接下来的C行每行代表初始状态下牛栏中牛的编号.
输出说明
仅一个数,表示需要花费的最小能量.
输入样例
5
5
2
7
4
2
输出样例
66
样例说明
行动 消耗 牛棚 约翰的位置
牛从棚1出来 10 *2 7 4 2 5
走到棚2 1 *2 74 2 5
牛从棚2出来 10 **74 2 5 2
牛5进入棚2 10 **5 7 4 2 2
走到棚4 2 *5 74 2 2
牛从棚4出来 10 *57*2 2 4
牛2进入棚4 10 *5 7 2 2 4
走到棚1 3 *5 7 2 2 4
牛4进入棚1 10 4 5 7 2 2
最后的序列:4,5,7,2,2.总花费:66.
来源信息
Kolstad&Burch, 2001
第4题 绿组.奶牛广告[sign]
题目描述
农夫约翰有一块位于高速公路一侧的农场,他想在奶牛身上打上广告语给自己生产的奶制品作些宣传.这样当奶牛们排成一排吃草时,开车的人就能看到广告.于是约翰依次在C(2≤C≤20)共奶牛的身上刷上了K(2≤K≤4)个字母组成了一句广告语,广告语中是没有空格.
在第二天早上出奶之后,农夫约翰注意到他刷在奶牛身上的广告语显示出错了,原因是奶牛们排错了次序.更糟糕的是,农夫约翰也忘了最初的广告语,因为约翰十分的健忘.好在约翰文化程度很低,他认识的单词并不多,他所用的广告语使用的单词都是他所认识的.约翰认识的单词不超过的D(1≤D≤150)个.一个单词可以不止一次地用于广告语中.
现在给出所有奶牛身上的信息,以及约翰认识的所有单词,请你编一个程序,帮助农夫约翰重建最初的信息.
输入说明
第1行为3个用空格隔开的整数K,C,D.
第2到C+1行每行均为K个字母,表示一头奶牛身上的信息.
从C+2行到C+D+1行每行为一个约翰认识的单词,单词的长度不超过10.
输出说明
第1行为在字典序列中最小的可能的句子.
第2行一个整数,表示有多少句可能的句子.
如果不存在符合要求的句子,输出“NOSOLUTIONS”.
输入样例
3 5 7
TEN
ATT
NAT
BAR
ACK
AT
ATTACK
BARN
CHICKENS
CHOPPERS
cows
TEN
输出样例
ATTACK BARN AT TEN
6
样例说明
六种可能的广告语是:
I TEN ATTACK BARN AT
2 TEN BARN AT ATTACK
3 ATTACK TEN BARN AT
4 ATTACK BARN AT TEN
5 BARN AT TEN ATTACK
6 BARN AT ATTACK TEN
来源信息
Galperin,2001
第5题 绿组.垃圾井[well]
题目描述
卡门一农夫约翰极其珍视的一条荷斯坦奶牛一已经落了到垃圾井中.垃圾井是农夫们扔垃圾的地方,它的深度为D(2≤D≤100)英尺.卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了.另外,卡门可以通过吃一些垃圾来维持自己的生命.每个垃圾都可以用来吃或堆放.并且堆放垃圾不用花费卡门的时间.
假设卡门预先知道了每个垃圾扔下的时间互,以及每个垃圾堆放的高度H和吃进该垃圾能维持生命的时间Fi.卡门体内现有足够持续10小时的能量.如果卡门10小时内没有进食就将饿死.
求出卡门最早能逃出井外的时间.
输入说明
第1行为2个整数,D和G(1≤G≤100),G为被投入井的垃圾的数量
第2到第G+1行每行包括3个整数:Ti(0<Ti≤1000),表示垃圾被投进井中的时间;Fi(l≤Fi≤30),表示该垃圾能维持卡门生命的时间;和Hi(l≤Hi≤25),该垃圾能垫高的高度.
输出说明
如果卡门可以爬出陷阱,输出一个整表示最早什么时候可以爬出;否则输出卡门最长可以存活多长时间.
输入样例
20 4
5 4 9
9 3 2
12 6 10
13 1 1
输出样例
13
样例说明
卡门堆放她收到的第1个垃圾:高度变为9;卡门吃掉她收到的第2个垃圾,使她的生命从10小时延伸到13小时;卡门堆放第3个垃圾,高度变为19;卡门堆放第4个垃圾,高度变为20.
来源信息
Cox, 2001
愿你出走半生,归来仍是少年