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。
這些草長得很快,每個月,草都會向外長出一些,如果一個小塊種了草,則它將向自己的上、下、左、右四小塊空地擴展,這四小塊空地都將變為有草的小塊。
請告訴小明,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); 2 int n=scn.nextInt(),m=scn.nextInt(); 3 char[][] a=new char[n][m]; 4 String line; 5 Queue<Node> queue=new LinkedList(); 6 for(int i=0;i<n;i++) 7 { 8 line=scn.next(); 9 for(int j=0;j<m;j++) { 10 a[i][j]=line.charAt(j); 11 if(a[i][j]=='g') { 12 queue.offer(new Node(i,j,0));//0月入隊 13 } 14 } 15 } 16 int k=scn.nextInt(); 17 while(!queue.isEmpty()) { 18 Node q=queue.poll(); 19 if(q.cnt==k+1) 20 break; 21 a[q.x][q.y]='g'; 22 //下 23 if(q.x+1<n&&a[q.x+1][q.y]!='g') { 24 queue.offer(new Node(q.x+1,q.y,q.cnt+1)); 25 } 26 //上 27 if(0<=q.x-1&&a[q.x-1][q.y]!='g') { 28 queue.offer(new Node(q.x-1,q.y,q.cnt+1)); 29 } 30 //右 31 if(q.y+1<m&&a[q.x][q.y+1]!='g') { 32 queue.offer(new Node(q.x,q.y+1,q.cnt+1)); 33 } 34 //左 35 if(0<=q.y-1&&a[q.x][q.y-1]!='g') { 36 queue.offer(new Node(q.x,q.y-1,q.cnt+1)); 37 } 38 } 39 for(int i=0;i<n;i++) { 40 for(int j=0;j<m;j++) { 41 System.out.print(a[i][j]); 42 } 43 System.out.println(); 44 }
D.選節目
問題描述
小明要組織一台晚會,總共准備了 n 個節目。然后晚會的時間有限,他只能最終選擇其中的 m 個節目。
這 n 個節目是按照小明設想的順序給定的,順序不能改變。
小明發現,觀眾對於晚上的喜歡程度與前幾個節目的好看程度有非常大的關系,他希望選出的第一個節目盡可能好看,在此前提下希望第二個節目盡可能好看,依次類推。
小明給每個節目定義了一個好看值,請你幫助小明選擇出 m 個節目,滿足他的要求。
輸入格式
輸入的第一行包含兩個整數 n, m ,表示節目的數量和要選擇的數量。
第二行包含 n 個整數,依次為每個節目的好看值。
輸出格式
輸出一行包含 m 個整數,為選出的節目的好看值。
樣例輸入
5 3
3 1 2 5 4
樣例輸出
3 5 4
樣例說明
選擇了第1, 4, 5個節目。
評測用例規模與約定
對於 30% 的評測用例,1 <= n <= 20;
對於 60% 的評測用例,1 <= n <= 100;
對於所有評測用例,1 <= n <= 100000,0 <= 節目的好看值 <= 100000。
這 n 個節目是按照小明設想的順序給定的,順序不能改變。
小明發現,觀眾對於晚上的喜歡程度與前幾個節目的好看程度有非常大的關系,他希望選出的第一個節目盡可能好看,在此前提下希望第二個節目盡可能好看,依次類推。
小明給每個節目定義了一個好看值,請你幫助小明選擇出 m 個節目,滿足他的要求。
輸入格式
輸入的第一行包含兩個整數 n, m ,表示節目的數量和要選擇的數量。
第二行包含 n 個整數,依次為每個節目的好看值。
輸出格式
輸出一行包含 m 個整數,為選出的節目的好看值。
樣例輸入
5 3
3 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,這樣的傻瓜解法里面具有重復的遍歷次序,顯然可以優化,但是優化的話,似乎會引起大量的元素移動。
我考試的解法建立在讀錯題目的基礎上,這里重新讀題更新了傻瓜解法,注意題目中應該是建立在第一個節目最好看的基礎上,再選擇第二個節目,不是選擇所有節目好看值最大的節目。思路是,建立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); 2 int n=scn.nextInt(),m=scn.nextInt(); 3 int[] a=new int[n]; 4 for(int i=0;i<n;i++) { 5 a[i]=scn.nextInt(); 6 } 7 int[] b=new int[m]; 8 for(int j=0;j<m;j++) { 9 if(j!=0) { 10 for(int i=b[j-1]+1;i<=n-m+j;i++) { 11 if(a[b[j]]<a[i]) 12 b[j]=i; 13 } 14 } 15 else { 16 for(int i=0;i<=n-m;i++) { 17 if(a[b[j]]<a[i]) 18 b[j]=i; 19 } 20 } 21 } 22 for(int i=0;i<m;i++) { 23 System.out.print(a[b[i]]+" "); 24 }
大佬解法:大佬說這是一個求靜態區間最值 (static RMQ) 問題,使用任何一種能在 O(log2n)時間內求出長度為 n 區間最值的數據結構都可以。
他提供了
數據結構:parse Table(ST表)Segment Tree(線段樹/區間樹)Binary Indexed Tree(樹狀數組/二叉索引樹)
算法:規約LCA + 分塊
我另開一篇博客記錄這個:https://www.cnblogs.com/code-fun/p/12499895.html
本篇參考:https://blog.csdn.net/qq_42815590/article/details/103544729
