藍橋杯校內賽題解

2022-06-13 09:54:11 字數 3316 閱讀 9043

a.1mb=1024kb

b.多少個9

問題描述

在1至2019中,有多少個數的數字中包括數字9?

注意,有的數中的數字中包含多個9,這個數隻算一次。例如,1999這個數包含三個數字9,但在計算時只算做乙個數。

在考試中,不知道1至2019的至中包不包括2019這個數,從結果上看應該是包括的:[1,2029]

c. 長草

問題描述

小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。

小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。

這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上、下、左、右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。

請告訴小明,k 個月後空地上哪些地方有草。

輸入格式

輸入的第一行包含兩個整數 n, m。

接下來 n 行,每行包含 m 個字母,表示初始的空地狀態,字母之間沒有空格。如果為小數點,表示為空地,如果字母為 g,表示種了草。

接下來包含乙個整數 k。

輸出格式

輸出 n 行,每行包含 m 個字母,表示 k 個月後空地的狀態。如果為小數點,表示為空地,如果字母為 g,表示長了草。

樣例輸入

4 5.g…

……g……2

樣例輸出

gggg.

gggg.

ggggg

.ggg.

評測用例規模與約定

對於 30% 的評測用例,2 <= n, m <= 20。

對於 70% 的評測用例,2 <= n, m <= 100。

對於所有評測用例,2 <= n, m <= 1000,1 <= k <= 1000。

題解:

普通解法1:遍歷然後更新

大佬解法:

採用廣度優先搜尋的想法,設定乙個佇列,第0月開始長草的先入隊,然後將四周的下乙個月長草的入隊後出隊,直到月份為k

1 scanner scn=new

scanner(system.in);

2int n=scn.nextint(),m=scn.nextint();

3char a=new

char

[n][m];

4string line;

5 queuequeue=new

linkedlist();

6for(int i=0;i)714

}15}16

int k=scn.nextint();

17while(!queue.isempty())

26//上27

if(0<=q.x-1&&a[q.x-1][q.y]!='g')

30//右31

if(q.y+1)

34//左35

if(0<=q.y-1&&a[q.x][q.y-1]!='g') 38}

39for(int i=0;i)

43system.out.println();

44 }

d.選節目

問題描述

小明要組織一台晚會,總共準備了 n 個節目。然後晚會的時間有限,他只能最終選擇其中的 m 個節目。

這 n 個節目是按照小明設想的順序給定的,順序不能改變。

小明發現,觀眾對於晚上的喜歡程度與前幾個節目的好看程度有非常大的關係,他希望選出的第乙個節目盡可能好看,在此前提下希望第二個節目盡可能好看,依次類推。

小明給每個節目定義了乙個好看值,請你幫助小明選擇出 m 個節目,滿足他的要求。

輸入格式

輸入的第一行包含兩個整數 n, m ,表示節目的數量和要選擇的數量。

第二行包含 n 個整數,依次為每個節目的好看值。

輸出格式

輸出一行包含 m 個整數,為選出的節目的好看值。

樣例輸入

5 33 1 2 5 4

樣例輸出

3 5 4

樣例說明

選擇了第1, 4, 5個節目。

評測用例規模與約定

對於 30% 的評測用例,1 <= n <= 20;

對於 60% 的評測用例,1 <= n <= 100;

對於所有評測用例,1 <= n <= 100000,0 <= 節目的好看值 <= 100000。

題解:

我考試的解法建立在讀錯題目的基礎上,這裡重新讀題更新了傻瓜解法,注意題目中應該是建立在第乙個節目最好看的基礎上,再選擇第二個節目,不是選擇所有節目好看值最大的節目。思路是,建立b[m]記錄m的節目,b[i]=max(a[x],x€[b[i-1]+1,n-m+i])的x,重複im次,其中,i=0時,max(a[x],x€[0,n-m+i])的x,這樣的傻瓜解法裡面具有重複的遍歷次序,顯然可以優化,但是優化的話,似乎會引起大量的元素移動。

1     scanner scn=new

scanner(system.in);

2int n=scn.nextint(),m=scn.nextint();

3int a=new

int[n];

4for(int i=0;i)

7int b=new

int[m];

8for(int j=0;j) 14}

15else20}

21}22for(int i=0;i)

大佬解法:大佬說這是乙個求靜態區間最值 (static rmq) 問題,使用任何一種能在 o(log2n)時間內求出長度為 n 區間最值的資料結構都可以。

他提供了

資料結構:parse table(st表)segment tree(線段樹/區間樹)binary indexed tree(樹狀陣列/二叉索引樹)

演算法:規約lca + 分塊

我另開一篇部落格記錄這個:

本篇參考:

藍橋杯校內賽題解

a.1mb 1024kb b.多少個9 問題描述 在1至2019中,有多少個數的數字中包括數字9?注意,有的數中的數字中包含多個9,這個數隻算一次。例如,1999這個數包含三個數字9,但在計算時只算做乙個數。在考試中,不知道1至2019的至中包不包括2019這個數,從結果上看應該是包括的 1,202...

2020藍橋杯校內模擬賽題解

第二題 問題描述 在1至2019中,有多少個數的數字中包含數字9?注意,有的數中的數字包含多個9,這個數隻算一次。例如,1999這個數包含數字9,在計算只是算乙個數。include using namespace std intmain cout count endl cout ending.end...

藍橋杯校內賽

問題描述 1200000有多少個約數 只計算正約數 答案提交 這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為乙個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。問題描述 在計算機儲存中,15.125gb是多少mb?答案提交 這是一道結果填空的題,你只需要算出結果後提交即可...