顯示具有 Volume 116XX 標籤的文章。 顯示所有文章
顯示具有 Volume 116XX 標籤的文章。 顯示所有文章

2011年8月7日 星期日

11687 - Digits


給定一個以十進制表示的初始值 x0,令 x1 為 x0 的位數,x2 為 x1 的位數,以此類推。例如當 x0 = 42 共有兩個位數,故 x1 = 2,2只有一個位數故 x2 = 1,x3 = 1…。本題給你 x0,請你找出最小的 i 值使得 x(i) = x(i-1)。

Input Specification

輸入包含多組測試資料,每組一列有一個整數表示 x0,x0為非負正數,且位數最大不超過一百萬位。最後一列以END表示。


Sample Input

42
END

Output Specification

請依題意在每一列輸出答案。


Output for Sample Input

3

原文出處

11639 - Guard the Land


有一塊農地長100公尺、寬100公尺,地主每天晚上都會請兩個警衛來看守農地,警衛的可視面積為一個長方形,兩個警衛的可視面積重疊的部份稱作"高安全區",只被一個警衛可視面積涵蓋的區域稱為"低安全區",不在任一警衛可視範圍內的稱為"不安全區",本題請你計算這三個區域的面積。

Input
輸入的第一列有一個整數N(N <= 100)表示測試資料的組數,每組資料各有兩列,表示每個晚上兩個警衛的可視區域,每個可視區域用四個整數x1 y1 x2 y2表示,(x1, y1)表示左下角座標,(x2, y2)表示右上角座標(0 <= x1, y1, x2, y2 <= 100; x1 < x2; y1 < y2)。

Output

請依範例資料格式輸出每組測試資料的編號,並依序輸出三個面積:高安全區、低安全區、不安全區。

Sample Input                             Output for Sample Input

2
10 10 20 20
15 15 25 25
10 10 20 20
20 20 30 30
Night 1: 25 150 9825
Night 2: 0 200 9800

範例資料的圖示:




















原文出處

11629 - Ballot evaluation

2009年歐洲議會大選結束,每個政黨的得票率出爐,而在選舉結果出爐之前,比爾與泰德兩人找了許多朋友進行選前預測。本題請你判斷每個預測結果是否正確。

Input Specification

輸入只有一筆測試資料,第一列有兩個整數 p 與 g,p表示政黨總數,g 表示所有預測總數,其中 1 <= p <= 50; 1 <= g <= 10000。接下來的 p 列表示每個政黨的得選率,每個黨政不會有相同名稱,且名稱長度小於等於20,名稱僅包含大小寫字母與數字,得票率為百分率,且小數點後僅包含一個位數。接下來 g 列為每筆預測資料,其格式為:P1 + P2 + ... + Pk COMP n,其中P1 ~ Pk表示各個政黨的名稱,COMP表示比較符號 <, >, <=, >=, 或 = 這幾種,n 為介於0~100的整數。每個黨政在每次預測中最多只會出現1次。

Output Specification

請你將每筆預測的結果作加總後,比較與 n 的關係,輸出預測是否正確,請參考範列輸出。

Sample Input

6 5
CDU 30.7
SPD 20.8
Gruene 12.1
FDP 11.0
DIELINKE 7.5
CSU 7.2
FDP > 11
CDU + SPD < 50
SPD + CSU >= 28
FDP + SPD + CDU <= 42
CDU + FDP + SPD + DIELINKE = 70

Sample Output

Guess #1 was incorrect.
Guess #2 was incorrect.
Guess #3 was correct.
Guess #4 was incorrect.
Guess #5 was correct.

原文出處

11628 - Another lottery

在Byteland 這個國度上流行著樂透彩(lottery),每一次樂透彩都有好幾個回合,每回合每個人都可以買任意多張,且一回合所賣出去的張數中只有一張會中獎,每張的中獎機率都一樣,贏家拿走該回合的彩金,彩金的大小是2的指數倍,也就是第一回合的彩金為2^1=2元,第二回合是2^2=4元,以此類推。
請你計算每一次的樂透彩中,每一個人可能贏走最多錢的機率為何。

Input Specification

輸入會有多組測試資料,每組資料的第一列會有兩個整數 n, m,n表示本次樂透參與的人數,m表示該次的回合數,其中1 <= n <= 10000; 1 <= m <= 30。接下來會有 n 列,每列 m 個整數,表示這 n 個人每回合所買的張數。每回合買出的張數介於1~10^9之間。
輸入的最後以兩個零作為結束。

Output Specification

每組測試資料請輸出 n 列,每列輸出一個最簡分數,這 n 個分數依序表示每個人贏走最多錢的機率,輸出格式請參考範例資料。


Sample Input

5 4
3 1 2 3
3 1 2 4
3 1 3 5
4 4 4 0
5 5 0 0
1 1
1
0 0

Sample Output

1 / 4
1 / 3
5 / 12
0 / 1
0 / 1
1 / 1

原文出處

11621 - Small Factors

定義一組整數集合C2,3為:

C2,3 = { n = 2i·3j, 其中 ij 為自然數(大於等於0的整數) }

The Problem

給定一個整數 m,請你從C2,3的整數集合中找到最小的 n 使得 n >= m成立。此時我們定義 n = Next2,3(m)。

The Input

輸入會有許多正整數 m,每個整數一列,當 m = 0表示測試資料結束,m的值不會比2^31來的大。

The Output

對於所有m值,請依本題要求輸出其Next2,3(m)的值,請在輸出的整數前後不要有多餘的空白字元。

Sample Input

100
108
1000
3000
0

Sample Output

108
108
1024
3072

原文出處

2011年8月3日 星期三

11631 - Dark roads

Byteland市政府打算實施一項節能減碳計劃,欲關閉部份街道的路燈來達到省電的目的。目前每條街道的路燈都是整夜開著的,每一天,每一公尺的的電費為1塊錢。雖然這個方法可以節省市府開支,但是為了夜間治安上的考量,又必須讓附近的居民覺得生活不受影響,所以他們以下列方法最佳化路燈的開支:關閉部份路燈,並保證從每個交叉路口到任一個路口一定存在一條路徑是路徑上所有街道的燈都是開著的。

請你幫市政府計算一個晚上最多可節省多少電費,而不會使得市民覺得夜間安全受到威脅。

Input Specification

輸入有多筆測試資料,每組資料一開頭會給定兩個整數 m, n(1 <= m <= 200000; m-1 <= n <= 200000),m表示交叉路口的總數,n表示街道總數,當m=n=0表測試資料結束。接下來的 n 列每列有3個整數x, y ,z分別表示雙向街道由 x 點到 y 點的長度為 z 公尺(0 <= x, y < m 且 x != y)。所有街道的長度總合必小於2^31。

Output Specification

請輸出市政一個晚上可節省多少電費。

Sample Input

7 11
0 1 7
0 3 5
1 2 8
1 3 9
1 4 7
2 4 5
3 4 15
3 5 6
4 5 8
4 6 9
5 6 11
0 0

Sample Output

51


原文出處

11634 - Generate random numbers

John von Neumann於1946年提出一個方法,能產生出一組虛擬的隨機數字,該方法被稱為"中間平方法"(middle-square),其作法如下:選擇一 個初始值 a0,該值以十進位表示的長度最長為 n,將 a0 取平方後在前面補 0 直到長度為 2 x n,並取中間的 n 個位數得到 a1,以此類推可得到a2, a3...。例如當 n = 4時:

例1:a0 = 5555, a0^2 = 30858025, a1 = 8580。
例2:a0 = 1111, a0^2 = 01234321, a1 = 2343。

可惜的是這個方法不夠好,它無法產生出所有相同長度的數字。本題給定 a0,請你計算共可產生出幾個數字。

Input Specification

輸入有多筆測試資料,每筆一列包含一整數 a0 (0 < a0 < 10000),請以 0 填滿長度不足4的數字前面,使每個數字長度皆為4個位數。當a0=0表示測試資料結束。

Output Specification

請計算每組資料中,以a0開始共可產生出幾個不同的數字,a0本身必需算在裡面。

Sample Input

5555
0815
6239
0

Sample Output

32
17
111

原文出處

11616 - Roman Numerals


The Problem

本題請你做羅馬數字與阿拉伯數字的轉換,羅馬數字以英文字母表示數目,其對應關係如下:

LetterIVXLCDM
Value1510501005001000

一般而言,羅馬數字是以字母所表示數目的大小,以遞減的方式由左至右寫出,並依序作加總。然而,有些數字的組合會導致需要做減法,如果一個表示較小值的字母在一個較大值字母的前面,則較小的值必須從較大值中減去,其結果再加到總合裡面。下列為適用減法規則的地方:
  • "I"出現在"V"或"X"的前面(例:IV=4)。
  • "X"出現在"L"或"C"的前面(例:XC=900)。
  • "C"出現在"D"或"M"的前面。
  • "V", "L", "D"後面必然接上一個較小值的字母,所以它們總是會加進總和裡面。
另外,"I", "X", "C", "M"不能連續出現超過三次,而"V", "L", "D"則不能連續出現超過一次。

羅馬數字不能表示零值,且若欲表示的值大於等於4000,則他們會在數字上劃一條橫線表示該數字必需乘上1000。

本題請你寫一個程式作羅馬數字與阿拉伯數字之間的轉換,注意,羅馬數字只會包含大寫字母。

The Input

輸入有多筆測試資料,每筆資料會有一個阿拉伯數字或是一個羅馬數字,其值為 n (0 < n < 4000)。

The Output

請在每一列輸出轉換結果。

Sample Input

XXV
4
942
MCMLXXXIII

Sample Output

25
IV
CMXLII
1983

原文出處

2011年8月2日 星期二

11614 - Etruscan Warriors Never Play Chess

The Problem

第一列有一個士兵,第二列有兩個士兵,第三列有三個士兵…以此類推,本題給定士兵總數,請你計算共可排成幾列。注意:若湊不滿一整列則該列不列入計算。

The Input

輸入的第一列有一個整數表示測試資料的組數,每組測試資料一列,每列有一整數 n (0 <= n <= 10^18)表示士兵總數。

The Output

請每組測試資料一列輸出一個整數,表示特定數量的士兵共可排成幾列。

Sample Input

6
3
6
7
8
9
10

Sample Output

2
3
3
3
3
4

原文出處

11677 - Alarm Clock

給你兩個時間:開始時間與終止時間,請你計算由開始時間到終止時間經過了多少分鐘。

Input

輸入有多筆測試資料,每組資料一列包含四個整數H1, M1, H2, M2,其中H1:M1表示開始時間(時:分),H2:M2表示終止時間(時:分)。(0 <= H1, H2 <= 23; 0 <= M1, M2 <= 59)。

Output

請每組測試資料輸出一列,表示經過多少分鐘。


Sample Input 

1 5 3 5
23 59 0 34
21 33 21 10
0 0 0 0

Sample Output 

120
35
1417


原文出處

11650 - Mirror Clock


牆上掛著一個時鐘,時鐘對面牆上掛著一面鏡子,看鏡子裡面的時鐘所讀到時間會與實際的時間不同,本題給你鏡子裡面時鐘的時間,請你推算實際的時間為何。





Input

輸入的第一列有一個整數T(T < 1000)表示測試資料的組數,接下來的T列為從鏡中所讀到的時間,其時間格式為HH:MM。所有時間一定是合法的。

Output

請你輸出每組資料實際的時間,其格式為HH:MM。

Sample Input                              Output for Sample Input

2
12:00
10:09
12:00
01: 51
原文出處

2011年6月1日 星期三

11608 - No Problem


近幾年舉辦程式設計競賽已經是很平常的事了,這對參賽者是件好事,但對出題都可不見得如此。如果比賽太常舉辦會使得出題者來不及出題。



給定一年中每個月份的出題量,與每個月份分別需要的題目量,如果該月份沒有足夠的題目來舉辦競賽則該月份的競賽將會被取消。請你寫一個程式來判斷一年中每個月份是否有足夠的題目量來舉行比賽。請你務必要知道,如果題目在某月被設計出來,則它只能被用在之後的月份,並且同一題目不能重複使用。


Input

每組測試資料三列,第一列會有一個整數S(0 <= S<= 100)表示今年一開始就已經有S道題目可以使用,第二列會有12個以空白隔開的整數,表示1~12月份中被設計出來的新題目,第三列也會有12個以空白 隔開的整數,表示每月舉辦比賽需要的題目量,所有整數都介於0~20之間。當S小於0表示資料結束。


Output

針對每組測試資料請以下列格式輸出,第一列為"Case X:"其中X表示測試資料編號,接下來請印出12列,表示每月份是否有足夠的題目舉辦比賽,"No problem! :D"表示足夠,"No problem. :("表示不夠。




Sample Input                                                        Output for Sample Input
5
3 0 3 5 8 2 1 0 3 5 6 9
0 0 10 2 6 4 1 0 1 1 2 2
-1
Case 1:
No problem! :D
No problem! :D
No problem. :(
No problem! :D
No problem! :D
No problem! :D
No problem! :D
No problem! :D
No problem! :D
No problem! :D
No problem! :D
No problem! :D







感謝OhDay指正錯誤

2011年5月27日 星期五

11636 - Hello World!


當 你第一次寫程式印出"Hello World!"的時候,你覺得很高興,那時候的你還不知道程式設計與演算法是多麼地複雜而又有趣。那時候你還沒學過迴圈,所以當你要印出 7 列"Hello World!"的時候就必須複製貼上產出七行程式。如果你夠機伶,你只需要做三次貼上的動作就夠了,在此我們不管你做了幾次複製的動作。如下圖,一開始只 有一行,複製並貼上後產生出兩行,再複製貼上後變成四行,再複製貼上三行最後變七行,所以你只要做三次貼上的動作就夠了,當然,你不能做刪除的動作。本題 給你欲輸出的行數,請你計算最少需要貼上多少次,才能由一行變為所需的行數。

Figure 1
Figure 2
Figure3
Figure 4


Input
本題會有約2000列輸入資料,每一筆資料會有一個整數N (0< N <10001) 表示需要印出的"Hello World!"行數。

Output

請依格式"Casse X: Y"輸出,X表示第一組測試資料,Y表示最少需要貼上幾次。

 

 

Sample Input                             Output for Sample Input

2
10
-1
Case 1: 1
Case 2: 4