1. 程式人生 > >NOIP 2015 提高組複賽試題

NOIP 2015 提高組複賽試題

CCF 全國資訊學奧林匹克聯賽(NOIP2015)複賽

提高組 day1

(請選手務必仔細閱讀本頁內容)

一.題目概況

中文題目名稱

神奇的幻方

資訊傳遞

鬥地主

英文題目與子目錄名

magic

message

landlords

可執行檔名

magic

message

landlords

輸入檔名

magic.in

message.in

landlords.in

輸出檔名

magic.out

message.out

landlords.out

每個測試點時限

1 秒

1 秒

2 秒

測試點數目

10

10

20

每個測試點分值

10

10

5

附加樣例檔案

結果比較方式

全文比較(過濾行末空格及文末回車)

題目型別

傳統

傳統

傳統

執行記憶體上限

128M

128M

1G

二.提交源程式檔名

對於 C++語言

magic.cpp

message.cpp

landlords.cpp

對於 C 語言

magic.c

message.c

landlords.c

對於 pascal 語言

magic.pas

message.pas

landlords.pas

三.編譯命令(不包含任何優化開關)

對於 C++語言

g++ -o magic

magic.cpp -lm

g++ -o message

message.cpp -lm

g++ -o landlords

landlords.cpp -lm

對於 C 語言

gcc -o magic

magic.c -lm

gcc -o message

message.c -lm

gcc -o landlords

landlords.c -lm

對於 pascal 語言

fpc magic.pas

fpc message.pas

fpc landlords.pas

注意事項:

1、檔名(程式名和輸入輸出檔名)必須使用英文小寫。

2、C/C++中函式 main()的返回值型別必須是 int,程式正常結束時的返回值必須是 0。 

3、全國統一評測時採用的機器配置為:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,記憶體 4G,上述時限以此配置為準。 

4、只提供 Linux 格式附加樣例檔案。

5特別提醒:評測在當前最新公佈的 NOI Linux 下進行,各語言的編譯器版本以其為準。


1.神奇的幻方

(magic.cpp/c/pas)

【問題描述】

幻方是一種很神奇的 N*N 矩陣:它由數字 1,2,3, … … , N*N 構成,且每行、每列及兩條對角線上的數字之和都相同。

當N為奇數時,我們可以通過以下方法構建一個幻方: 

首先將 1 寫在第一行的中間。

之後,按如下方式從小到大依次填寫每個數K(K= 2,3, … , N*N ):

1. 若 (K−1) 在第一行但不在最後一列,則將K填在最後一行,(K− 1) 所在列的右一列;

2. 若 (K− 1) 在最後一列但不在第一行,則將K填在第一列,(K− 1) 所在行的上一行;

3. 若 (K− 1) 在第一行最後一列,則將K填在 (K− 1) 的正下方;

4. 若 (K− 1) 既不在第一行,也不在最後一列,如果 (K− 1) 的右上方還未填數, 則將K填在(K− 1)的右上方,否則將K填在 (K− 1) 的正下方

現給定N,請按上述方法構造 N*N 的幻方。

【輸入格式】

輸入檔名為 magic.in。

輸入檔案只有一行,包含一個整數N,即幻方的大小。

【輸出格式】

輸出檔名為 magic.out。

輸出檔案包含N行,每行N個整數,即按上述方法構造出的N*N的幻方。相鄰 兩個整數之間用單個空格隔開。

【輸入輸出樣例 1】

magic.in

magic.out

3

8 1 6

3 5 7

4 9 2

見選手目錄下的 magic/magic1.in 和 magic/magic1.ans。

【輸入輸出樣例 2】

見選手目錄下的 magic/magic2.in 和 magic/magic2.ans。

【資料規模與約定】

對於 100% 的資料,1 ≤N≤39 且N為奇數。

2.資訊傳遞

(message.cpp/c/pas)

【問題描述】 

n 個同學(編號為 1 到 n)正在玩一個資訊傳遞的遊戲。在遊戲裡每人都有一個固定的資訊傳遞物件,其中,編號為 i 的同學的資訊傳遞物件是編號為 Ti 的同學。 遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件(注意:可能有人可以從若干人那裡獲取資訊,但是每人只會把資訊告訴一個人,即自己的資訊傳遞物件)。當有人從別人口中得知自己的生日時,遊戲結束。請問該遊戲一共可以進行幾輪?

【輸入格式】

輸入檔名為 message.in。

輸入共 2 行。

第 1 行包含 1 個正整數 n ,表示 n 個人。

第 2 行包含 n 個用空格隔開的正整數T1,T2,… ,Tn,其中第Ti個整數表示編號為 i 的同學的資訊傳遞物件是編號為 Ti 的同學,Ti ≤n 且Ti ≠i

資料保證遊戲一定會結束。

【輸出格式】

輸出檔名為 message.out。

輸出共 1 行,包含 1 個整數,表示遊戲一共可以進行多少輪。 

【輸入輸出樣例 1】

message.in

message.out

5

2 4 2 3 1

3

見選手目錄下的 message/message1.in 與 message/message1.ans。

【輸入輸出樣例 1 說明】

遊戲的流程如圖所示。當進行完第 3 輪遊戲後,4 號玩家會聽到 2 號玩家告訴他自己的生日,所以答案為 3。當然,第 3 輪遊戲後,2 號玩家、3 號玩家都能從自己的訊息 來源得知自己的生日,同樣符合遊戲結束的條件。

【樣例輸入輸出 2】

見選手目錄下的 message/message2.in 與 message/message2.ans。

【資料規模與約定】

對於 30%的資料 n ≤200; 

對於 60%的資料,n ≤ 2500; 

對於 100%的資料,n ≤ 200000。


3. 鬥地主

landlords.cpp/c/pas)

【問題描述】

牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃、紅心、梅花、 方片的 A 到 K 加上大小王的共 54 張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關係根據牌的數碼表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色並不對牌的大小產生影響。每一局遊戲中,一副手牌由 n 張牌組成。遊戲者每次可以根據規定的牌型進行出牌,首先打光自己的手牌一方取得遊戲的勝利。

現在,牛牛隻想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個問題。

需要注意的是,本題中游戲者每次可以出手的牌型與一般的鬥地主相似而略有不同。具體規則如下:

牌型

牌型說明

牌型舉例照片

火箭

即雙王(雙鬼牌)。

炸彈

四張同點牌。如四個 A。

單張牌

單張牌,比如 3。

對子牌

兩張碼數相同的牌。

三張牌

三張碼數相同的牌。

三帶一

三張碼數相同的牌 + 一張單牌。例如:三張3+單4

三帶二

三張碼數相同的牌 + 一對牌。例如:三張3+對4

單順子

五張或更多碼數連續的單牌(不包括 2點和雙王)例如:單 7+單 8+單 9+單 10+單 J。另外,在順牌(單順子、雙順子、三順子)中,牌的花色不要求相同。

雙順子

三對或更多碼數連續的對牌(不包括 2點和雙王)。例如:對3+對4+對5。

三順子

二個或更多碼數連續的三張牌(不能包

括 2 點和雙王)。例如:三張 3+三張 4+三張 5。

四帶二

四張碼數相同的牌+任意兩張單牌(或任意兩對牌)例如:四張 5+單 3+單 8 或 四張 4+對 5+對 7

【輸入格式】

輸入檔名為 landlords.in。

第一行包含用空格隔開的2個正整數T,n,表示手牌的組數以及每組手牌的張數。

接下來T組資料,每組資料n行,每行一個非負整數對ai,bi,表示一張牌,其中ai表示牌的數碼,bi表示牌的花色,中間用空格隔開。特別的,我們用 1 來表示數碼 A,11 表示數碼 J,12 表示數碼 Q,13 表示數碼 K;黑桃、紅心、梅花、方片分別用 1-4 來表示;小王的表示方法為 0 1,大王的表示方法為 0 2。

【輸出格式】

輸出檔名為 landlords.out。

共 T 行,每行一個整數,表示打光第i組手牌的最少次數。 

【輸入輸出樣例 1】

landlords.in

landlords.out

1 8

7 4

8 4

9 1

10 4

11 1

5 1

1 4

11

3

見選手目錄下的 landlords/landlords1.in 與 landlords/landlords1.ans。

【輸入輸出樣例 1 說明】

共有 1 組手牌,包含 8 張牌:方片7,方片8,黑桃9,方片10,黑桃J,黑桃5,方片A 以及黑桃A。可以通過打單順子(方片7,方片8,黑桃9,方片10,黑桃J),單張牌(黑桃5)以及對子牌(黑桃A 以及方片A)在3次內打光。

【輸入輸出樣例 2】

landlords.in

landlords.out

1 17

12 3

4 3

2 3

5 4

10 2

3 3

12 2

0 1

1 3

10 1

6 2

12 1

11 3

5 2

12 4

2 2

7 2

6

見選手目錄下的 landlords/landlords2.in 與 landlords/landlords2.ans。

【樣例輸入輸出 3】

見選手目錄下的 landlords/landlords3.in 與 landlords/landlords3.ans。

【資料規模與約定】

對於不同的測試點,我們約定手牌組數 與張數 的規模如下:

測試點編號

T

n

測試點編號

T

n

1

100

2

11

100

14

2

100

2

12

100

15

3

100

3

13

10

16

4

100

3

14

10

17

5

100

4

15

10

18

6

100

4

16

10

19

7

100

10

17

10

20

8

100

11

18

10

21

9

100

12

19

10

22

10

100

13

20

10

23

資料保證:所有的手牌都是隨機生成的。