1. 程式人生 > >【體驗】 第九屆藍橋杯 C/C++ ----省賽(B組)

【體驗】 第九屆藍橋杯 C/C++ ----省賽(B組)

第九屆藍橋杯大賽個人賽省賽(軟體類)

C/C++ 大學B組

考生須知:

  1. 考試開始後,選手首先下載題目,並使用考場現場公佈的解壓密碼解壓試題。
  2. 考試時間為4小時。時間截止後,提交答案無效。
  3. 在考試強制結束前,選手可以主動結束考試(需要身份驗證),結束考試後將無法繼續提交或瀏覽答案。
  4. 選手可瀏覽自己已經提交的答案。被瀏覽的答案允許拷貝。
  5. 對同一題目,選手可多次提交答案,以最後一次提交的答案為準。
  6. 選手切勿在提交的程式碼中書寫“姓名”、“考號”,“院校名”等與身份有關的資訊或其它與競賽題目無關的內容,否則成績無效。
  7. 選手必須通過瀏覽器方式提交自己的答案。選手在其它位置的作答或其它方式提交的答案無效。
  8. 試題包含三種類型:“結果填空”、“程式碼填空”與“程式設計”。

結果填空題:要求選手根據題目描述直接填寫結果。求解方式不限。不要求原始碼。

把結果填空的答案直接通過網頁提交即可,不要書寫多餘的內容。

程式碼填空題:要求選手在弄清給定程式碼工作原理的基礎上填寫缺失的部分,使得程式邏輯正確、完整。

把程式碼填空的答案(僅填空處的答案,不包括題面已存在的程式碼或符號)直接通過網頁提交即可,不要書寫多餘的內容。

使用ANSI C/ANSI C++ 標準,不要依賴作業系統或編譯器提供的特殊函式。

程式設計題目:要求選手設計的程式對於給定的輸入能給出正確的輸出結果。考生的程式只有能執行出正確結果才有機會得分

注意:在評卷時使用的輸入資料與試卷中給出的示例資料可能是不同的。選手的程式必須是通用的,不能只對試卷中給定的資料有效。

對於程式設計題目,要求選手給出的解答完全符合ANSI C++標準,不能使用諸如繪圖、Win32API、中斷呼叫、硬體操作或與作業系統相關的API。

程式碼中允許使用STL類庫。

注意: main函式結束必須返回0

注意: 所有依賴的函式必須明確地在原始檔中 #include <xxx>, 不能通過工程設定而省略常用標頭檔案。

所有原始碼必須在同一檔案中。除錯通過後,拷貝提交。

提交時,注意選擇所期望的編譯器型別。

1.結果填空 (滿分5分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,不限解決問題的方式,只要求提交結果。

必須通過瀏覽器提交答案。

2.結果填空 (滿分7分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,不限解決問題的方式,只要求提交結果。

必須通過瀏覽器提交答案。

3.結果填空 (滿分13分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,不限解決問題的方式,只要求提交結果。

必須通過瀏覽器提交答案。

4.結果填空 (滿分17分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,不限解決問題的方式,只要求提交結果。

必須通過瀏覽器提交答案。

5.程式碼填空 (滿分9分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,不限解決問題的方式。

只要求填寫缺失的程式碼部分,千萬不要畫蛇添足,填寫多餘的已有程式碼或符號。

必須通過瀏覽器提交答案。

6.程式設計(滿分11分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,必須通過程式設計的方式解決問題。

注意:在評卷時使用的輸入資料與試卷中給出的示例資料可能是不同的。選手的程式必須是通用的,不能只對試卷中給定的資料有效。

仔細閱讀程式的輸入、輸出要求,千萬不要輸出沒有要求的、多餘的內容,例如:“請您輸入xx資料:”。

建議仔細閱讀示例,不要想當然!

程式處理完一個用例的資料後,立即退出(return 0),千萬不要迴圈等待下一個用例的輸入。

程式必須使用標準輸入、標準輸出,以便於機器評卷時重定向。

對於程式設計題目,要求選手給出的解答完全符合ANSI C++標準,不能使用諸如繪圖、Win32API、中斷呼叫、硬體操作或與作業系統相關的API。

程式碼中允許使用STL類庫。

注意: main函式結尾需要return 0

注意: 所有依賴的函式必須明確地在原始檔中 #include <xxx>, 不能通過工程設定而省略常用標頭檔案。

所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。

提交時,注意選擇所期望的編譯器型別。

7.程式設計(滿分19分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,必須通過程式設計的方式解決問題。

注意事項同上題

8.程式設計(滿分21分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,必須通過程式設計的方式解決問題。

注意事項同上題

9.程式設計(滿分23分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,必須通過程式設計的方式解決問題。

注意事項同上題

10.程式設計(滿分25分)

問題的描述在考生資料夾下對應題號的“題目.txt”中。相關的參考檔案在同一目錄中。請先閱讀題目,必須通過程式設計的方式解決問題。

注意事項同上題

第1題.

標題:第幾天

2000年的1月1日,是那一年的第1天。

那麼,2000年的5月4日,是那一年的第幾天?

注意:需要提交的是一個整數,不要填寫任何多餘內容。

第2題.

標題:明碼

漢字的字形存在於字型檔中,即便在今天,16點陣的字型檔也仍然使用廣泛。

16點陣的字型檔把每個漢字看成是16x16個畫素資訊。並把這些資訊記錄在位元組中。

一個位元組可以儲存8位資訊,用32個位元組就可以存一個漢字的字形了。

把每個位元組轉為2進製表示,1表示墨跡,0表示底色。每行2個位元組,

一共16行,佈局是:

    第1位元組,第2位元組

    第3位元組,第4位元組

    ....

    第31位元組, 第32位元組

這道題目是給你一段多個漢字組成的資訊,每個漢字用32個位元組表示,這裡給出了位元組作為有符號整數的值。

題目的要求隱藏在這些資訊中。你的任務是復原這些漢字的字形,從中看出題目的要求,並根據要求填寫答案。

這段資訊是(一共10個漢字):

4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0

16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16

4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0

0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4

4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64

16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128

0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0

2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0

1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0

0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0

注意:需要提交的是一個整數,不要填寫任何多餘內容。

第3題.

標題:乘積尾零

如下的10行資料,每行有10個整數,請你求出它們的乘積的末尾有多少個零?

5650 4542 3554 473 946 4114 3871 9073 90 4329

2758 7949 6113 5659 5245 7432 3051 4434 6704 3594

9937 1173 6866 3397 4759 7557 3070 2287 1453 9899

1486 5722 3135 1170 4014 5510 5120 729 2880 9019

2049 698 4582 4346 4427 646 9742 7340 1230 7683

5693 7015 6887 7381 4172 4341 2909 2027 7355 5649

6701 6645 1671 5978 2704 9926 295 3125 3878 6785

2066 4247 4800 1578 6652 4616 1113 6205 3264 2915

3966 5291 2904 1285 2193 1428 2265 8730 9436 7074

689 5510 8243 6114 337 4096 8199 7313 3685 211

注意:需要提交的是一個整數,表示末尾零的個數。不要填寫任何多餘內容。

第4題.

標題:測試次數

x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是:摔手機。

各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出一個耐摔指數來,之後才允許上市流通。

x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的第一層不是地面,而是相當於我們的2樓。

如果手機從第7層扔下去沒摔壞,但第8層摔壞了,則手機耐摔指數=7。

特別地,如果手機從第1層扔下去就壞了,則耐摔指數=0。

如果到了塔的最高層第n層扔沒摔壞,則耐摔指數=n

為了減少測試次數,從每個廠家抽樣3部手機參加測試。

某次測試的塔高為1000層,如果我們總是採用最佳策略,在最壞的運氣下最多需要測試多少次才能確定手機的耐摔指數呢?

請填寫這個最多測試次數。

注意:需要填寫的是一個整數,不要填寫任何多餘內容。

第5題.

標題:快速排序。

以下程式碼可以從陣列a[]中找出第k小的元素。

它使用了類似快速排序中的分治演算法,期望時間複雜度是O(N)的。

請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。

#include <stdio.h>

int quick_select(int a[], int l, int r, int k) {

       int p = rand() % (r - l + 1) + l;

       int x = a[p];

       {int t = a[p]; a[p] = a[r]; a[r] = t;}

       int i = l, j = r;

       while(i < j) {

              while(i < j && a[i] < x) i++;

              if(i < j) {

                     a[j] = a[i];

                     j--;

              }

              while(i < j && a[j] > x) j--;

              if(i < j) {

                     a[i] = a[j];

                     i++;

              }

       }

       a[i] = x;

       p = i;

       if(i - l + 1 == k) return a[i];

       if(i - l + 1 < k) return quick_select( _____________________________ ); //填空

       else return quick_select(a, l, i - 1, k);

}

int main()

{

       int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};

       printf("%d\n", quick_select(a, 0, 14, 5));

       return 0;

}

注意:只填寫劃線部分缺少的程式碼,不要抄寫已經存在的程式碼或符號。

第6題.

標題:遞增三元組

給定三個整數陣列

A = [A1, A2, ... AN],

B = [B1, B2, ... BN],

C = [C1, C2, ... CN],

請你統計有多少個三元組(i, j, k) 滿足:

1. 1 <= i, j, k <= N 

2. Ai < Bj < Ck 

【輸入格式】

第一行包含一個整數N。

第二行包含N個整數A1, A2, ... AN。

第三行包含N個整數B1, B2, ... BN。

第四行包含N個整數C1, C2, ... CN。

對於30%的資料,1 <= N <= 100 

對於60%的資料,1 <= N <= 1000

對於100%的資料,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000

【輸出格式】

一個整數表示答案

第7題.

標題:螺旋折線

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。 

對於整點(X, Y),我們定義它到原點的距離dis(X, Y)是從原點到(X, Y)的螺旋折線段的長度。 

例如dis(0, 1)=3, dis(-2, -1)=9 

給出整點座標(X, Y),你能計算出dis(X, Y)嗎?

【輸入格式】

X和Y 

對於40%的資料,-1000 <= X, Y <= 1000 

對於70%的資料,-100000 <= X, Y <= 100000 

對於100%的資料, -1000000000 <= X, Y <= 1000000000 

【輸出格式】

輸出dis(X, Y) 

【樣例輸入】

0 1

第8題.

標題:日誌統計

小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:

ts id 

表示在ts時刻編號id的帖子收到一個"贊"。 

現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就認為這個帖子曾是"熱帖"。 

具體來說,如果存在某個時刻T滿足該帖在[T, T+D)這段時間內(注意是左閉右開區間)收到不少於K個贊,該帖就曾是"熱帖"。 

給定日誌,請你幫助小明統計出所有曾是"熱帖"的帖子編號。 

【輸入格式】

第一行包含三個整數N、D和K。 

以下N行每行一條日誌,包含兩個整數ts和id。 

對於50%的資料,1 <= K <= N <= 1000 

對於100%的資料,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000 

【輸出格式】

按從小到大的順序輸出熱帖id。每個id一行。 

【輸入樣例】

7 10 2 

0 1 

0 10   

10 10 

10 1 

9 1

100 3 

100 3 

【輸出樣例】

資源約定:

峰值記憶體消耗(含虛擬機器) < 256M

CPU消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。

注意:

main函式需要返回0;

只使用ANSI C/ANSI C++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include <xxx>

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

第9題.

標題:全球變暖

你有一張某海域NxN畫素的照片,"."表示海洋、"#"表示陸地,如下所示:

.......

.##....

.##....

....##.

..####.

...###.

.......

其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。 

由於全球變暖導致了海面上升,科學家預測未來幾十年,島嶼邊緣一個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰(上下左右四個相鄰畫素中有海洋),它就會被淹沒。 

例如上圖中的海域未來會變成如下樣子:

.......

.......

.......

.......

....#..

.......

.......

請你計算:依照科學家的預測,照片中有多少島嶼會被完全淹沒。 

【輸入格式】

第一行包含一個整數N。  (1 <= N <= 1000) 

以下N行N列代表一張海域照片。 

照片保證第1行、第1列、第N行、第N列的畫素都是海洋。 

【輸出格式】

一個整數表示答案。

【輸入樣例】

7

.......

.##....

.##....

....##.

..####.

...###.

....... 

【輸出樣例】

資源約定:

峰值記憶體消耗(含虛擬機器) < 256M

CPU消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。

注意:

main函式需要返回0;

只使用ANSI C/ANSI C++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include <xxx>

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

第10題.

標題:乘積最大

給定N個整數A1, A2, ... AN。請你從中選出K個數,使其乘積最大。 

請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。 

注意,如果X<0, 我們定義X除以1000000009的餘數是負(-X)除以1000000009的餘數。

即:0-((0-x) % 1000000009)

【輸入格式】

第一行包含兩個整數N和K。 

以下N行每行一個整數Ai。 

對於40%的資料,1 <= K <= N <= 100 

對於60%的資料,1 <= K <= 1000 

對於100%的資料,1 <= K <= N <= 100000  -100000 <= Ai <= 100000 

【輸出格式】

一個整數,表示答案。

【輸入樣例】

5 3

-100000  

-10000  

2  

100000 

10000 

【輸出樣例】

999100009

再例如:

【輸入樣例】

5 3

-100000  

-100000  

-2  

-100000 

-100000

【輸出樣例】

-999999829

資源約定:

峰值記憶體消耗(含虛擬機器) < 256M

CPU消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。

注意:

main函式需要返回0;

只使用ANSI C/ANSI C++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include <xxx>

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。