USACO Contest: OCT09

感觉挺奇怪的,这是USACO的比赛....让人失望....

题目如下:(开始没看到第一行的文字........)

 

注意:每個題目都有一個滿分。你要努力達到分數最大化。你的分數是你得分最高的三道題的
分數的和。所以你要盡量正確解答出分數較高的題目。

**********************************************************************
                             金組試題
**********************************************************************
                             共有九題
**********************************************************************

第一題: 雙數? 單數?  [25分] [Rob Kolstad, 2009]

Bessie那慘無人道的二年級老師搞了一個有 N (1 <= N <= 100) 個正整數 I (1 <= I
<= 10^60) 的表叫Bessie去判斷“奇偶性”(這個詞語意思向二年級的學生解釋,就是“這個
數是單數,還是雙數啊?”)。Bessie被那個表的長度深深地震精到了,竟然跟棟棟的泛做表
格一樣多道題!!!畢竟她才剛剛學會數數啊。

寫一個程序讀入N個整數,如果是雙數,那麼在獨立的一行內輸出"even",如果是單數則類似
地輸出"odd".

分值: 25

題目名稱: evenodd

輸入格式:

* 第一行: 一個單獨的整數: N

* 第2到第N+1行: 第j+1行有第j個需要判斷奇偶性的整數。

樣例輸入 (文件:evenodd.in):

2
1024
5931

輸入細節:

兩個整數: 1024和5931

輸出格式:

* 第1..N行: 第j行根據第j個整數的奇偶性輸出一個單詞"even"或者"odd"

樣例輸出 (文件 evenodd.out):

even
odd

輸出格式:

1024可以被2整除; 而5931不可以。

**********************************************************************

第2題: 犁田機器人 [25分] [Rob Kolstad (傳統題目), 2009]

Farmer John為了讓自己從無窮無盡的犁田工作中解放出來,於是買了個新機器人幫助他犁田。
這個機器人可以完成犁田的任務,可惜有一個小小的缺點:這個犁田機器人一次只能犁一個邊的
長度是整數的長方形的田地。

因為FJ的田地有樹和其他障礙物,所以FJ設定機器人去犁很多不同的長方形。這些長方形允許重
疊。他給機器人下了P個指令,每個指令包含一個要犁長方形的地。這片田地由長方形的左下角
和右上角坐標決定。他很好奇最後到底有多少個方格的地被犁過了。

一般來說,田地被分割為很多小方格。這些方格的邊和x軸或y軸平行。田地的寬度為X個方格,
高度為Y個方格 (1 <= X <= 240; 1 <= Y <= 240). FJ執行了I (1 <= I <= 200)個指
令,每個指令包含4個整數:Xll, Yll, Xur, Yur (1 <= Xll <= Xur; Xll <= Xur <=
X; 1 <= Yll <= Yur; Yll <= Yur <= Y), 分別是要犁的長方形的左下角坐標和右上角坐
標。機器人會犁所有的橫坐標在Xll..Xur並且縱坐標在Yll..Yur範圍內的所有方格的地。可能
這個長方形會比你想像的多一行一列(就是說從第Xll列到第Xur列一共有Xur - Xll + 1列而
不是Xur - Xll列)。

考慮一個6方格寬4方格高的田地。FJ進行了2個操作(如下),田地就被犁成"*"和"#"了。雖然
一般被犁過的地看起來都是一樣的。但是標成"#"可以更清晰地看出最近一次被犁的長方形。

    ......             **....             #####.
    ......  (1,1)(2,4) **....  (1,3)(5,4) #####.
    ......             **....             **....
    ......             **....             **....

一共14個方格的地被犁過了。

分數: 25

題目名稱: rplow

輸入格式:

* 第一行: 三個由空格隔開的整數: X, Y, I

* 第二行到第I+1行:第i+1行有四個整數Xll, Yll, Xur, Yur,表示第i個指令。

樣例輸入 (文件 rplow.in):

6 4 2
1 1 2 4
1 3 5 4

輸入細節:

如同題目描述的例子。

輸出格式:

* 第一行: 一個單獨的整數表示被犁過的方格數。

樣例輸出 (文件 rplow.out):

14

**********************************************************************

第三題: 牛棚回聲 [50分] [傳統題目, 2009]

奶牛們灰常享受在牛欄中哞叫,因為她們可以聽到她們哞聲的回音。雖然有時候並不能完全聽到
完整的回音。Bessie曾經是一個出色的秘書,所以她精確地紀錄了所有的哞叫聲及其回聲。她
很好奇到底兩個聲音的重復部份有多長。

輸入兩個字符串(長度為1到80個字母),表示兩個哞叫聲。你要確定最長的重復部份的長度。
兩個字符串的重復部份指的是同時是一個字符串的前綴和另一個字符串的後綴的字符串。

我們通過一個例子來理解題目。考慮下面的兩個哞聲:

     moyooyoxyzooo
     yzoooqyasdfljkamo

第一個串的最後的部份"yzooo"跟第二個串的第一部份重復。第二個串的最後的部份"mo"跟第一
個串的第一部份重復。所以"yzooo"跟"mo"都是這2個串的重復部份。其中,"yzooo"比較長,
所以最長的重復部份的長度就是5。

分值: 50

題目名稱: echo

輸入格式:

* 前兩行: 每一行是1個字符串表示奶牛的哞聲或它的回聲。

樣例輸入 (文件 echo.in):

abcxxxxabcxabcd
abcdxabcxxxxabcx

輸出格式:

* 第一行: 包含一個單獨的整數表示輸入的2個字符串中,一個字符串的前綴和另一個字符串的後
 綴的最長的重復部份的長度。

樣例輸出 (文件 echo.out):

11

輸出細節:

"abcxxxxabcx"是第一個字符串的前綴和第二個字符串的後綴。

**********************************************************************

第四題: 木瓜林 [80分] [Rob Kolstad, 2009]

Bessie不小心遊蕩出Farmer John的田地,而走進了相鄰的農民的地。她舉起一個木瓜,木
瓜對奶牛來說可是不可多得得美味。這個木瓜林像一般的威斯康星州的田地一樣被分割成一個
R行C列的網格(1 <= R <= 40, 1 <= C <= 40)。Bessie可以從一個格沿著一條跟X軸或
Y軸平行的直線走到鄰接的令一個格。Bessie發現一開始她自己在木瓜林的(1,1),也就是第
一行第一列慢悠悠地咀嚼著木瓜。

Bessie總是用她最信賴地雙筒望遠鏡去數每一個鄰接的格的低掛著的木瓜的數目。然後她就遊
蕩到那個有最多沒有被吃掉的木瓜的鄰接的格子(保證這樣的格子只有一個)。

按照這種移動方法,最終Bessie總是會在(R,C)停止然後吃掉那裡的木瓜。

給定這個木瓜林的大小及每個格的木瓜數F_ij(1 <= F_ij <= 100), 要求Bessie一共吃了
多少個木瓜。

分值: 80

題目名稱: papaya

輸入格式:

* 第一行: 兩個空格隔開的整數R和C.

* 第2到R+1行: 第i+1行有C個空格隔開的整數,表示第i行的每個格的水果數。也就是F_i1,
 F_i2, ..., F_iC.

樣例輸入 (文件 papaya.in):

3 4
3 3 4 5
4 5 3 2
1 7 4 2

輸入細節:

三行四列。Bessie起始於左上角的"3"。

輸出格式:

* 第一行: 一個單獨的整數,表示到Bessie吃完右下角(R,C)的木瓜回到牛棚的時候為止,
 一共在木瓜林吃掉了多少個木瓜。

樣例輸出 (文件 papaya.out):

39

輸出格式:

Bessie按照下圖數字旁邊的字母的順序吃掉木瓜。

     (1,1) ---> (1,C)
(1,1) 3a  3   4g  5h  (1,C)
  |   4b  5c  3f  2i    |
(R,1) 1   7d  4e  2j  (R,C)
     (R,1) ---> (R,C)

她吃了39個木瓜,剩下4個沒有吃(也就是說除了2個格幸免於難,剩下的格子都被Bessie掃
蕩過了)。

**********************************************************************

第五題: 悠閒的漫步 [100分] [Rob Kolstad (傳統題目), 2009]

Bessie透過牛棚的大門向外望去。發現今天是一個美麗的春季早晨。她想,“我真的好想好想
沐浴著春風,走在草地之中,感受嫩草溫柔地撫摸四蹄地的感覺。”她知道一旦她離開了牛棚,
她將沿著一條小徑走一段路,然後就會出現一個三岔路口,她必須在兩條小徑中選擇一條繼續
走下去。然後她又會遇到更多的三岔路口,進行更多的選擇,知道她到達一個青翠的牧場為止。

她決定坐一個選擇使得她在去吃早草的路途中可以走過最多的小徑。給你這些小徑的描述,要
求Bessie最多可以走過多少條小徑。假定Bessie一出牛棚就有2條路徑,Bessie需要從中選
擇一條。

農場中有P-1 (1 <= P <= 1,000) 個分岔節點(範圍是1..P),引向P片草地,它們之間由
小徑連接。對任意一個節點來說,只有一條從牛棚(被標記為節點1)開始的路徑可以到達。

考慮下面的圖。線段表示小徑,"%"表示草地。右邊的圖中的"#"表示一條到達草地的高亮的路
徑。

                 %                             %
                /                             /
      2----%   7----8----%          2----%   7####8----%
     / \      /      \             # #      #      #
    1   5----6        9----%      1   5####6        9----%
     \   \    \        \           \   \    \        #
      \   %    %        %           \   %    %        %
       \                             \
        3-----%                       3-----%
         \                             \
          4----%                        4----%
           \                             \
            %                             %

從分岔節點9到達的草地是兩個可以讓Bessie走過最多小徑的草地之一。在去吃早草的路上
Bessie將走過7條不同的小徑。這些草地是離牛棚也就是節點1最“遠”的。

由3個整數來表示每一個節點:Cn, D1和D2,Cn是節點的編號(1 <= Cn <= P-1); D1和
D2是由該節點引出的兩條小徑的終點(0 <= D1 <= P-1; 0 <= D2 <= P-1)。如果D1為
0,表示這條小徑引向的是一片牧草地;D2也一樣。

分值: 100

題目名稱: stroll

輸入格式:

* 第1行: 一個單獨的整數: P

* 第2到第P行: 第i+1行有3個由空格隔開的整數,表示一個分岔節點Cn, D1和D2。

樣例輸入 (文件 stroll.in):

10
7 8 0
5 0 6
9 0 0
6 0 7
3 4 0
2 5 0
8 0 9
4 0 0
1 2 3

輸入細節:

這個輸入表示題目描述中的例子。

輸出格式:

* 第一行: 一個單獨的整數,表示Bessie去最遠的草地的路上最多可以走過的小徑的數目。

樣例輸出 (文件 stroll.out):

7

輸出細節:

1-2-5-6-7-8-9-P是最長的一條路徑之一。

**********************************************************************

第六題: 乳草的入侵 [125分] [Rob Kolstad, 2009]

Farmer John一直努力讓他的草地充滿鮮美多汁的而又健康的牧草。可惜天不從人願,他在植
物大戰人類中敗下陣來。邪惡的乳草已經在他的農場的西北部份佔領了一片立足之地。

草地像往常一樣,被分割成一個高度為Y(1 <= y <= 100), 寬度為X(1 <= x <= 100)的
直角網格。(1,1)是左下角的格(也就是說坐標排布跟一般的X,Y坐標相同)。乳草一開始佔
領了格(Mx,My)。每個星期,乳草傳播到已被乳草佔領的格子四面八方的每一個沒有很多石頭
的格(包括垂直與水平相鄰的和對角線上相鄰的格)。1周之後,這些新佔領的格又可以把乳草
傳播到更多的格裡面了。

Bessie想要在草地被乳草完全佔領之前盡可能的享用所有的牧草。她很好奇到底乳草要多久才
能佔領整個草地。如果乳草在0時刻處於格(Mx,My),那麼還在那個時刻它們可以完全佔領入侵
整片草地呢(對給定的數據總是會發生)?

草地由一個圖片表示。"."表示草,而"*"表示大石。比如這個X=4, Y=3的例子。

     ....
     ..*.
     .**.

如果乳草一開始在左下角(第1排,第1列),那麼草地的地圖將會以如下態勢發展:

      ....  ....  MMM.  MMMM  MMMM 
      ..*.  MM*.  MM*.  MM*M  MM*M 
      M**.  M**.  M**.  M**.  M**M 
星期數  0     1     2     3     4

乳草會在4星期後佔領整片土地。

分值: 125

題目名稱: milkweed

輸入格式:

* 第一行: 四個由空格隔開的整數: X, Y, Mx, My

* 第2到第Y+1行: 數據的第y+1行由X個字符("."表示草地,"*"表示大石),描述草地的
 第(Y+2-y)行。

樣例輸入 (文件 milkweed.in):

4 3 1 1
....
..*.
.**.

輸出格式:

* 第一行: 一個單獨的整數表示最後一個不是大石塊的格子被乳草佔領的星期數。如果這永遠
 不發生,輸出-1.

樣例輸出 (文件 milkweed.out):

4

**********************************************************************

第7題: 零用錢 [250分] [Brian Dean, 2004]

作為創造產奶紀錄的回報,Farmer John決定開始每個星期給Bessie一點零花錢。

FJ有一些硬幣,一共有N (1 <= N <= 20)種不同的面額。每一個面額都能整除所有比它大
的面額。

他想用給定的硬幣的集合,每個星期至少給Bessie某個零花錢的數目C (1 <= C <=
100000000)。請幫他計算他最多能支付多少個星期的零花錢。

分值: 250

題目名稱: allow

輸入格式:

* 第一行: 兩個由空格隔開的整數: N 和 C

* 第2到第N+1行: 每一行有兩個整數表示一個面額的硬幣:硬幣面額V (1 <= V <=
 100,000,000)和Farmer John擁有的該面額的硬幣數B (1 <= B <=
        1,000,000).

樣例輸入 (文件 allow.in):

3 6
10 1
1 100
5 120

輸入細節:

FJ想要每個星期給Bessie六美分。他有100個1美分硬幣,120個5美分硬幣,和一個10美分
硬幣。

輸出細節:

* 第一行: 一個單獨的整數,表示Farmer John最多能給Bessie支付多少個星期至少為C的
 零用錢。

樣例輸出 (文件 allow.out):

111

輸出細節:

FJ可以在一個星期超額付給Bessie一個10美分硬幣。然後接下來的10個星期每星期付給
Bessie兩個5美分硬幣。最後100個星期每星期付給Bessie一個1美分硬幣跟一個5美分硬
幣。

**********************************************************************

第8題: Bessie的體重問題 [250分] [Rob Kolstad (傳統題目), 2009]

Bessie像她的諸多姊妹一樣,因為從Farmer John的草地吃了太多美味的草而長出了太多的
贅肉。所以FJ將她置於一個及其嚴格的節食計畫之中。她每天不能吃多過H (5 <= H <=
45,000)公斤的乾草。

Bessie只能吃一整綑乾草;當她開始吃一綑乾草的之後就再也停不下來了。她有一個完整的
N (1 <= N <= 500)綑可以給她當作晚餐的乾草的清單。她自然想要盡量吃到更多的乾草。
很自然地,每綑乾草只能被吃一次(即使在列表中相同的重量可能出現2次,但是這表示的是
兩綑乾草,其中每綑乾草最多只能被吃掉一次)。

給定一個列表表示每綑乾草的重量S_i (1 <= S_i <= H), 求Bessie不超過節食的限制的
前提下可以吃掉多少乾草(注意一旦她開始吃一綑乾草就會把那一綑乾草全部吃完)。

分值: 250

題目名稱: diet

輸入格式:

* 第一行: 兩個由空格隔開的整數: H 和 N

* 第2到第N+1行: 第i+1行是一個單獨的整數,表示第i綑乾草的重量S_i。

樣例輸入 (文件 diet.in):

56 4
15
19
20
21

輸入細節:

有四綑草,重量分別是15, 19, 20和21。Bessie在56公斤的限制範圍內想要吃多少就可
以吃多少。

輸出格式:

* 第一行: 一個單獨的整數表示Bessie在限制範圍內最多可以吃多少公斤的乾草。

樣例輸出 (文件 diet.out):

56

輸出細節:

Bessie可以吃3綑乾草(重量分別為15, 20, 21)。恰好達到她的56公斤的限制。

**********************************************************************

第九題: 熱浪 [300分] [Rob Kolstad (傳統題目), 2009]

德克薩斯純樸的民眾們這個夏天正在遭受巨大的熱浪!!!他們的德克薩斯長角牛吃起來不錯,
可是他們並不是很擅長生產富含奶油的乳製品。Farmer John此時以先天下之憂而憂,後天下
之樂而樂的精神,身先士卒地承擔起向德克薩斯運送大量的營養冰涼的牛奶的重任,以減輕德
克薩斯人忍受酷暑的痛苦。

FJ已經研究過可以把牛奶從威斯康星運送到德克薩斯州的路線。這些路線包括起始點和終點先
一共經過T (1 <= T <= 2,500)個城鎮,方便地標號為1到T。除了起點和終點外地每個城鎮
由兩條雙向道路連向至少兩個其它地城鎮。每條道路有一個通過費用(包括油費,過路費等等)。
考慮這個有7個城鎮的地圖。城鎮5是奶源,城鎮4是終點(括號內的數字是道路的通過費用)。

                              [1]----1---[3]-
                             /               \
                      [3]---6---[4]---3--[3]--4
                     /               /       /|
                    5         --[3]--  --[2]- |
                     \       /        /       |
                      [5]---7---[2]--2---[3]---
                            |       /
                           [1]------

經過路線5-6-3-4總共需要花費3 (5->6) + 4 (6->3) + 3 (3->4) = 10的費用。

給定一個地圖,包含C (1 <= C <= 6,200)條直接連接2個城鎮的道路。每條道路由道路的
起點Rs,終點Re (1 <= Rs <= T; 1 <= Re <= T),和花費(1 <= Ci <= 1,000)組
成。求從起始的城鎮Ts (1 <= Ts <= T)到終點的城鎮Te(1 <= Te <= T)最小的總費用。

分值: 300

題目名稱: heatwv

輸入格式:

* 第一行: 4個由空格隔開的整數: T, C, Ts, Te

* 第2到第C+1行: 第i+1行描述第i條道路。有3個由空格隔開的整數: Rs, Re和Ci

樣例輸入 (文件 heatwv.in):

7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1

輸入細節:

跟題目描述的地圖一致。

輸出格式:

* 第一行: 一個單獨的整數表示Ts到Te的最短路的長度。(不是費用麼?怎麼突然變直白了
 ——譯者注)數據保證至少存在一條道路。

樣例輸出 (文件 heatwv.out):

7

輸出細節:

5->6->1->4 (3 + 1 + 3)

**********************************************************************

水平與時間所限,錯漏在所難免。如果您發現任何翻譯錯誤或者表達不清晰之處請告知(sinya8
@gmail.com)。一切以英文題目為準。
Translation by Sinya Lee

==============================================================

总共做了8题,交了7题,时间到了...

1题套函数odd()

2,3,4,5,6搜索

7题贪心,排序,然后从大往小搜....大的直接用小的不够就补,直到剩下的无法凑够C

8题背包而已...注意降维

9题迪杰斯特拉....

=================================================================

纪念一下,第一次参加USACO的比赛...............

 

 

posted @ 2009-10-24 15:27  瀑布飞鹰  阅读(994)  评论(0编辑  收藏  举报