2020藍橋杯校內模擬賽


2020藍橋杯校內模擬賽

因為退集訓隊了,以后可能很少寫解題報告了,也可能會寫點別的吧,但可能不是在這里

答案不一定全對,代碼不一定最優,代碼即解題報告


 

 

1. 問題描述

  1200000有多少個約數(只計算正約數)。

答案提交

  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

答案:96


 

2. 問題描述

  在計算機存儲中,15.125GB是多少MB?

答案提交

  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

答案:15488


3. 問題描述

  一棵包含有2019個結點的二叉樹,最多包含多少個葉結點?

答案提交

  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

答案:1010


4. 問題描述

  在1至2019中,有多少個數的數位中包含數字9?
  注意,有的數中的數位中包含多個9,這個數只算一次。例如,1999這個數包含數字9,在計算只是算一個數。

答案提交

  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

答案:544


5. 問題描述

  一個正整數如果任何一個數位不大於右邊相鄰的數位,則稱為一個數位遞增的數,例如1135是一個數位遞增的數,而1024不是一個數位遞增的數。
  給定正整數 n,請問在整數 1 至 n 中有多少個數位遞增的數?

輸入格式

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

輸出格式

  輸出一行包含一個整數,表示答案。

樣例輸入

30

樣例輸出

26

評測用例規模與約定

  對於 40% 的評測用例,1 <= n <= 1000。
  對於 80% 的評測用例,1 <= n <= 100000。
  對於所有評測用例,1 <= n <= 1000000。

代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int ans=0;
 4 bool check(int n) {
 5     int last=10;
 6     while(n) {
 7         if(n%10>last) return false;
 8         last=n%10;
 9         n/=10;
10     }
11     return true;
12 }
13 int main()
14 {
15     int n;
16     scanf("%d",&n);
17     for(int i=1;i<=n;i++) {
18         if(check(i)) {
19             ans++;
20         }
21     }
22     cout<<ans<<endl;
23     return 0;
24 }
View Code

6. 問題描述

  小明對類似於 hello 這種單詞非常感興趣,這種單詞可以正好分為四段,第一段由一個或多個輔音字母組成,第二段由一個或多個元音字母組成,第三段由一個或多個輔音字母組成,第四段由一個或多個元音字母組成。
  給定一個單詞,請判斷這個單詞是否也是這種單詞,如果是請輸出yes,否則請輸出no。
  元音字母包括 a, e, i, o, u,共五個,其他均為輔音字母。

輸入格式

  輸入一行,包含一個單詞,單詞中只包含小寫英文字母。

輸出格式

  輸出答案,或者為yes,或者為no。

樣例輸入

lanqiao

樣例輸出

yes

樣例輸入

world

樣例輸出

no

評測用例規模與約定

  對於所有評測用例,單詞中的字母個數不超過100。

代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 bool check(char ch) {
 4     if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')
 5         return true;
 6     return false;
 7 }
 8 int main()
 9 {
10     char s[110];
11     scanf("%s",s);
12     int len=strlen(s),i=0;
13     int s1=0,s2=0,s3=0,s4=0;
14 
15     while(i!=len&&!check(s[i])) {
16         i++;
17         s1++;
18     }
19     while(i!=len&&check(s[i])) {
20         i++;
21         s2++;
22     }
23     while(i!=len&&!check(s[i])) {
24         i++;
25         s3++;
26     }
27     while(i!=len&&check(s[i])) {
28         i++;
29         s4++;
30     }
31     if(i==len&&s1&&s2&&s3&&s4)
32         cout<<"yes";
33     else cout<<"no";
34     return 0;
35 }
View Code

7. 問題描述

  在數列 a[1], a[2], ..., a[n] 中,如果對於下標 i, j, k 滿足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],則稱 a[i], a[j], a[k] 為一組遞增三元組,a[j]為遞增三元組的中心。
  給定一個數列,請問數列中有多少個元素可能是遞增三元組的中心。

輸入格式

  輸入的第一行包含一個整數 n。
  第二行包含 n 個整數 a[1], a[2], ..., a[n],相鄰的整數間用空格分隔,表示給定的數列。

輸出格式

  輸出一行包含一個整數,表示答案。

樣例輸入

5
1 2 5 3 5

樣例輸出

2

樣例說明

  a[2] 和 a[4] 可能是三元組的中心。

評測用例規模與約定

  對於 50% 的評測用例,2 <= n <= 100,0 <= 數列中的數 <= 1000。
  對於所有評測用例,2 <= n <= 1000,0 <= 數列中的數 <= 10000。

代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int l[1010],r[1010],a[1010];
 4 int main()
 5 {
 6     int ans=0,n=0;
 7     cin>>n;
 8     for(int i=1;i<=n;i++)
 9         scanf("%d",&a[i]);
10     for(int i=1;i<=n;i++)
11         for(int j=i-1;j>=1;j--) {
12             if(a[j]<a[i]) {
13                 l[i]++;
14                 break;
15             }
16         }
17     for(int i=1;i<=n;i++)
18         for(int j=i+1;j<=n;j++) {
19             if(a[j]>a[i]) {
20                 r[i]++;
21                 break;
22             }
23         }
24     for(int i=1;i<=n;i++)
25         if(l[i]&&r[i]) ans++;
26     cout<<ans;
27     return 0;
28 }
View Code

8. 問題描述

  小明有一塊空地,他將這塊空地划分為 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 #include<bits/stdc++.h>
 2 #define mp make_pair
 3 using namespace std;
 4 int vis[1010][1010];
 5 char s[1100];
 6 int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
 7 int main()
 8 {
 9     int n=0,m=0;
10     cin>>n>>m;
11     queue<pair<int,int> >que;
12     while(!que.empty()) que.pop();
13     for(int i=1;i<=n;i++) {
14         scanf("%s",s);
15         for(int j=0;j<m;j++)
16             if(s[j]=='.') vis[i][j+1]=-1;
17             else {
18                 vis[i][j+1]=0;
19                 que.push(mp(i,j+1));
20             }
21     }
22     int k;
23     cin>>k;
24     while(!que.empty()) {
25         pair<int,int> p=que.front();
26         que.pop();
27         int x=p.first,y=p.second;
28         if(vis[x][y]>k) break;
29         for(int i=0;i<4;i++) {
30             int nowX=x+d[i][0];
31             int nowY=y+d[i][1];
32             if(nowX<1||nowX>n||nowY<1||nowY>m||vis[nowX][nowY]>=0) continue;
33             vis[nowX][nowY]=vis[x][y]+1;
34             que.push(mp(nowX,nowY));
35         }
36     }
37     for(int i=1;i<=n;i++) {
38         for(int j=1;j<=m;j++)
39             if(vis[i][j]<=k&&vis[i][j]>=0) putchar('g');
40             else putchar('.');
41         putchar('\n');
42     }
43     return 0;
44 }
View Code

9. 問題描述

  小明想知道,滿足以下條件的正整數序列的數量:
  1. 第一項為 n;
  2. 第二項不超過 n;
  3. 從第三項開始,每一項小於前兩項的差的絕對值。
  請計算,對於給定的 n,有多少種滿足條件的序列。

輸入格式

  輸入一行包含一個整數 n。

輸出格式

  輸出一個整數,表示答案。答案可能很大,請輸出答案除以10000的余數。

樣例輸入

4

樣例輸出

7

樣例說明

  以下是滿足條件的序列:
  4 1
  4 1 1
  4 1 2
  4 2
  4 2 1
  4 3
  4 4

評測用例規模與約定

  對於 20% 的評測用例,1 <= n <= 5;
  對於 50% 的評測用例,1 <= n <= 10;
  對於 80% 的評測用例,1 <= n <= 100;
  對於所有評測用例,1 <= n <= 1000。

代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int dp[1010][1010];
 4 int dfs(int a,int b) {
 5     int ans=1;
 6     if(dp[a][b]!=-1) return dp[a][b];
 7     int d=(a>b)?(a-b):(b-a);
 8     for(int i=1;i<d;i++) {
 9         ans=(ans+dfs(b,i))%10000;
10     }
11     dp[a][b]=ans;
12     return ans;
13 }
14 int main()
15 {
16     int n,ans=0;
17     cin>>n;
18     for(int i=1;i<=1000;i++)
19         for(int j=1;j<=1000;j++)
20             dp[i][j]=-1;
21     for(int i=1;i<=n;i++) {
22         ans=(ans+dfs(n,i))%10000;
23     }
24     cout<<ans;
25     return 0;
26 }
View Code

10. 問題描述

  小明要組織一台晚會,總共准備了 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。

代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=100010;
 4 int vis[maxn],a;
 5 int main()
 6 {
 7     int n,m=0;
 8     cin>>n>>m;
 9     vector<pair<int,int> >v;
10     for(int i=1;i<=n;i++) {
11         scanf("%d",&a);
12         vis[i]=-1;
13         v.push_back(make_pair(a,i));
14     }
15     sort(v.rbegin(),v.rend());
16     for(int i=0;i<v.size();i++) {
17         if(i+1>m) break;
18         vis[v[i].second]=v[i].first;
19     }
20     for(int i=1;i<=n;i++)
21         if(vis[i]!=-1)
22             printf("%d ",vis[i]);
23     return 0;
24 }
View Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM