1. 程式人生 > 其它 >2021年第十二屆藍橋杯省賽C/C++B組題解

2021年第十二屆藍橋杯省賽C/C++B組題解

試題 A :空間

本題總分:5分

【問題描述】

小藍準備用256MB的記憶體空間開一個數組,陣列的每個元素都是32位二進位制整數,如果不考慮程式

佔用的空間和維護記憶體需要的輔助空間,請問256MB的空間可以儲存多少個32位二進位制整數?

【答案提交】

這是一道結果填空題,你只需要算出結果後提交即可。本題的結果為一個整數,在提交答案時只填寫

這個整數,填寫多餘的內容將無法得分。

#include<stdio.h>
int main(){
	int ans=2;
	int a=2;
	for(int i=1;i<26;i++){
		ans = ans*a; 
	} 
	printf("%d",ans) ;
	return 0;
}

答案:67108864

解析:考查計算機基礎知識,1位元組等於8位,1MB=220B。

試題 B :卡片

本題總分:5分

【問題描述】

小藍有很多數字卡片,每張卡片上數字都是0~9。

小藍準備用這些卡片來拼一些數,他想從1開始拼出正整數,每拼一個,就儲存起來,卡片就不能用來拼其他數了。

小藍想知道自己能從1 拼到多少。

例如,當小藍又30張卡片,其中0~9各3張,則小藍可以拼出1~10,但是拼11時卡片1已經只有一張了,不夠拼出11。

現在小藍手裡有0~9的卡片各2021張,共20210張,請問小藍可以從1拼到多少?

提示:建議使用計算機程式設計解決問題。

【答案提交】

這是一道結果填空題,你只需要算出結果後提交即可。本題的結果為一個整數,在提交答案時只

填寫這個

整數,填寫多餘的內容將無法得分。

解析:本題使用暴力破解的辦法,遍歷1~n。

試題 C :直線

本題總分:10分

【問題描述】

在平面直角座標系中,兩點可以確定一條直線。

如果有多點在一條直線上,那麼這些點中任意兩點確定的直線是同一條。給定平面上 2 × 3

整點 {(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即橫座標是 0 到 1 (包含 0 和 1) 之間的整數、縱座標

是 0 到 2 (包含 0 和 2) 之間的整數的點。這些點一共確定了 11 條不同的直線。給定平面上 20 × 21 個

整點 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z},

即橫座標是 0 到 19 (包含 0 和 19) 之間的整數、縱坐

標是 0 到 20 (包含 0 和 20) 之間的整數的點。請問這些點一共確定了多少條不同的直線。

【答案提交】

這是一道結果填空題,你只需要算出結果後提交即可。本題的結果為一個整數,在提交答案時只填寫這

個整數,填寫多餘的內容將無法得分。

試題 D :貨物擺放

本題總分:10分

【問題描述】

小藍有一個超大的倉庫,可以擺放很多貨物。

現在,小藍有 n 箱貨物要擺放在倉庫,每箱貨物都是規則的正方體。小藍規定了長、寬、高

三個互相垂直的方向,每箱貨物的邊都必須嚴格平行於長、寬、高。

小藍希望所有的貨物最終擺成一個大的立方體。即在長、寬、高的方向上分別堆 L、W、H 的貨物,滿

足 n = L × W × H。給定 n,請問有多少種堆放貨物的方案滿足要求。

例如,當 n = 4 時,有以下 6 種方案:1×1×4、1×2×2、1×4×1、2×1×2、 2 × 2 × 1、4 × 1 × 1。

請問,當 n = 2021041820210418 (注意有 16 位數字)時,總共有多少種方案?

提示:建議使用計算機程式設計解決問題。

試題 E :路徑

本題總分:15分

【問題描述】

小藍學習了最短路徑之後特別高興,他定義了一個特別的圖,希望找到圖中的最短路徑。

小藍的圖由 2021 個結點組成,依次編號 1 至 2021。對於兩個不同的結點 a, b,如果 a 和

b 的差的絕對值大於 21,則兩個結點之間沒有邊相連;如果 a 和 b 的差的絕對值小於等於

21,則兩個點之間有一條長度為 a 和 b 的最小公倍數的無向邊相連。例如:結點 1 和結點

23 之間沒有邊相連;結點 3 和結點 24 之間有一條無向邊,長度為 24;結點 15 和結點 25

之間有一條無向邊,長度為 75。請計算,結點 1 和結點 2021 之間的最短路徑長度是多少。

提示:建議使用計算機程式設計解決問題。

試題 F :時間顯示

時間限制:1.0s 記憶體限制:256.0MB 本題總分:15分

【問題描述】

小藍要和朋友合作開發一個時間顯示的網站。在伺服器上,朋友已經獲取了當前的時間,用一個整數表示,

值為從 1970 年 1 月 1 日 00:00:00 到當前刻經過的毫秒數。現在,小藍要在客戶端顯示出這個時間。小藍

不用顯示出年月日,只需要顯示出時分秒即可,毫秒也不用顯示,直接捨去即可。給定一個用整數表示的

時間,請將這個時間對應的時分秒輸出。

【輸入格式】

輸入一行包含一個整數,表示時間。

【輸出格式】

輸出時分秒錶示的當前時間,格式形如 HH:MM:SS,其中 HH 表示時,值為 0 到 23,MM 表示分,值為 0 到 59,

SS 表示秒,值為 0 到 59。時、分、秒不足兩位時補前導 0。

【樣例輸入 1】

46800999

【樣例輸出 1】

13:00:00

【樣例輸入 2】

1618708103123

【樣例輸出 2】

01:08:23

【評測用例規模與約定】

對於所有評測用例,給定的時間為不超過 1018 的正整數。

試題 G :砝碼稱重

時間限制:1.0s 記憶體限制:256.0MB 本題總分:20分

【問題描述】

你有一架天平和 N 個砝碼,這 N 個砝碼重量依次是 W1, W2, · · · , WN。請你計算一共可以稱出多少種不同的重量?

注意砝碼可以放在天平兩邊。

【輸入格式】

輸入的第一行包含一個整數 N。第二行包含 N 個整數:W1, W2, W3, · · · , WN。

【輸出格式】

輸出一個整數代表答案。

【樣例輸入】

3

1 4 6

【樣例輸出】

10

【樣例說明】

能稱出的 10 種重量是:1、2、3、4、5、6、7、9、10、11。

1 = 1;

2 = 6 − 4 (天平一邊放 6,另一邊放 4);

3 = 4 − 1;

4 = 4;

5 = 6 − 1;

6 = 6;

7 = 1 + 6;

9 = 4 + 6 − 1;

10 = 4 + 6;

11 = 1 + 4 + 6。

【評測用例規模與約定】

對於 50% 的評測用例,1 ≤ N ≤ 15。

對於所有評測用例,1 ≤ N ≤ 100,N 個砝碼總重不超過 100000。

試題 H :楊輝三角形

時間限制:1.0s 記憶體限制:256.0MB 本題總分:20分

【問題描述】
下面的圖形是著名的楊輝三角形:

如果我們按從上到下、從左到右的順序把所有數排成一列,可以得到如下

數列:

1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, …

給定一個正整數 N,請你輸出數列中第一次出現 N 是在第幾個數?

【輸入格式】

輸入一個整數 N。

【輸出格式】

輸出一個整數代表答案。

【樣例輸入】

6

【樣例輸出】

13

【評測用例規模與約定】

對於 20% 的評測用例,1 ≤ N ≤ 10;

對於所有評測用例,1 ≤ N ≤ 1000000000。

試題 I :雙向排序

時間限制:1.0s 記憶體限制:256.0MB 本題總分:25分

【問題描述】
給定序列 (a1, a2, · · · , an) = (1, 2, · · · , n),即 ai = i。
小藍將對這個序列進行 m 次操作,每次可能是將 a1, a2, · · · , aqi 降序排列,
或者將 aqi , aqi+1, · · · , an 升序排列。
請求出操作完成後的序列。
【輸入格式】
輸入的第一行包含兩個整數 n, m,分別表示序列的長度和操作次數。
接下來 m 行描述對序列的操作,其中第 i 行包含兩個整數 pi, qi 表示操作
型別和引數。當 pi = 0 時,表示將 a1, a2, · · · , aqi 降序排列;當 pi = 1 時,表示
將 aqi , aqi+1, · · · , an 升序排列。
【輸出格式】
輸出一行,包含 n 個整數,相鄰的整數之間使用一個空格分隔,表示操作
完成後的序列。
【樣例輸入】
3 3
0 3
1 2

0 2
【樣例輸出】
3 1 2
【樣例說明】
原數列為 (1, 2, 3)。 第 1 步後為 (3, 2, 1)。 第 2 步後為 (3, 1, 2)。 第 3 步後為 (3, 1, 2)。與第 2 步操作後相同,因為前兩個數已經是降序了。
【評測用例規模與約定】
對於 30% 的評測用例,n, m ≤ 1000;
對於 60% 的評測用例,n, m ≤ 5000;
對於所有評測用例,1 ≤ n, m ≤ 100000,0 ≤ ai ≤ 1,1 ≤ bi ≤ n。

試題 J :括號序列

時間限制:1.0s 記憶體限制:256.0MB 本題總分:25分

【問題描述】

給定一個括號序列,要求儘可能少地新增若干括號使得括號序列變得合法,當新增完成後,會產生不同的新增結果,

請問有多少種本質不同的新增結果。兩個結果是本質不同的是指存在某個位置一個結果是左括號,而另一個是右括號。

例如,對於括號序列 (((),只需要新增兩個括號就能讓其合法,有以下幾種不同的新增結果:()()()、()(())、(())()、(()()) 和 ((()))。

【輸入格式】

輸入一行包含一個字串 s,表示給定的括號序列,序列中只有左括號和右括號。

【輸出格式】

輸出一個整數表示答案,答案可能很大,請輸出答案除以 1000000007 (即109 + 7) 的餘數。

【樣例輸入】

((()

【樣例輸出】

5

【評測用例規模與約定】

對於 40% 的評測用例,|s| ≤ 200。

對於所有評測用例,1 ≤ |s| ≤ 5000。