看看去年蓝桥考了什么,第十三届蓝桥杯省赛(C/C++ 大学B组)题解(一)

简介: 看看去年蓝桥考了什么,第十三届蓝桥杯省赛(C/C++ 大学B组)题解

A:九进制转十进制


问题描述


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


九进制正整数 (2022)9 转换成十进制等于多少?


运行限制


最大运行时间:1s

最大运行内存: 512M


题目思路


这是一道经典的进制转换题目,具体可以点进链接看看这篇文章。进制转换点击这里!!!


代码演示


#include <bits/stdc++.h>
using namespace std;
int main()    
{
  string s ="2022";
  int ans = 0;
  for(int i = 0; i < s.size(); i++) {
    char t = s[i];
    if(t >= '0' && t <= '9') 
      ans = ans * 9 + t - '0';
    else 
      ans = ans * 9 + t - 'a' + 10;
  }
  cout<< ans;
}


B:顺子日期


问题描述


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。


例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。


小明想知道在整个 2022 年份中,一共有多少个顺子日期?


运行限制


最大运行时间:1s

最大运行内存: 512M


题目思路


这道题题目很坑,其实含有012的日期也是一个顺子日期。

我们用数组表示日期,遍历每一个月日,当符合顺子日期的定义时,记录一次答案。


代码演示


#include <bits/stdc++.h>
using namespace std;
int date[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};   
int main()
{
    int b[8] = {2,0,2,2};                              
    int sum = 0;
    for (int i = 1; i <= 12; i++) {
        b[4] = i / 10;                
        b[5] = i % 10;               
        for (int j = 1; j <= date[i]; j++) {
            b[6] = j / 10;            
            b[7] = j % 10;          
            if ((b[4] + 1 == b[5] && b[5] + 1 == b[6]) || (b[5] + 1 == b[6] && b[6] + 1 == b[7])) 
                sum++;
            }
        }
    }
    cout << sum << endl;
    return 0;
}


C:刷题统计


问题描述


小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?

输入格式


输入一行包含三个整数 a,b 和 n.

输出格式


输出一个整数代表天数。

样例输入

10 20 99

样例输出

8

评测用例规模与约定


对于 50%50% 的评测用例, 1≤a,b,n≤1061≤a,b,n≤106.


对于 100%100% 的评测用例, 1≤a,b,n≤10181≤a,b,n≤1018.


运行限制


最大运行时间:1s

最大运行内存: 256M


题目思路


先计算出一周刷的题目数量,再计算出剩余题量需要几天。


代码演示


#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll a,b,n,add,day;
int main() {
  cin >> a >> b >> n;
  int ti = 5 * a + 2 * b;
  ll weak = n / ti;
  ll last = n % ti;
  day += weak * 7;
  int x = 1;
  while(last > 0) {
    if(x % 7 == 6 || x % 7 == 0) {
      last -= b;
    } else {
      last -= a;
    }
    day++;
    x++;
  }
  cout << day;
}


D:修剪灌木


问题描述


爱丽丝要完成一项修剪灌木的工作。


有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。


灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式


一个正整数 N, 含义如题面所述。

输出格式


输出 N 行, 每行一个整数, 第 i 行表示从左到右第 i 棵树最高能长到多高。

样例输入

3

样例输出

4
2
4


评测用例规模与约定


对于 30%30% 的数据, N≤10N≤10.


对于 100%100% 的数据, 1<N≤100001<N≤10000.


运行限制


最大运行时间:1s

最大运行内存: 512M


题目思路


对于左边的灌木来说,长的最高的时候应该是从自己出发向右走再返回自己的长度。

对于正中间的灌木来说,长度最高的时候就是从自己出发再返回。

对于右边的灌木来说,长的最高的时候应该是从自己出发向左走再返回自己的长度。


代码演示


#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
    cin >> n;
    for(int i = 1; i <= n / 2; i++) {
        cout << 2 * n - 2 * i << endl;
    }
    if(n % 2 != 0) {
        cout << n - 1 << endl;
    }
    for (int i = n / 2; i > 0; i--) {
        cout << 2 * n - 2 * i << endl;
    }
    return 0;
}



E:X 进制减法


问题描述


进制规定了数字在数位上逢几进一。


X 进制是一种很神奇的进制, 因为其每一数位的进制并不固定!例如说某 种 X 进制数, 最低数位为二进制, 第二数位为十进制, 第三数位为八进制, 则 X 进制数 321 转换为十进制数为 65 。


现在有两个 X 进制表示的整数 A 和 B, 但是其具体每一数位的进制还不确 定, 只知道 A 和 B 是同一进制规则, 且每一数位最高为 N 进制, 最低为二进 制。请你算出 A−B 的结果最小可能是多少。


请注意, 你需要保证 A 和 B 在 X 进制下都是合法的, 即每一数位上的数 字要小于其进制。

输入格式


第一行一个正整数 N, 含义如题面所述。


第二行一个正整数 Ma, 表示 X 进制数 A 的位数。


第三行 Ma 个用空格分开的整数, 表示 X 进制数 A 按从高位到低位顺序各 个数位上的数字在十进制下的表示。


第四行一个正整数 Mb, 表示 X 进制数 B 的位数。


第五行 Mb 个用空格分开的整数, 表示 X 进制数 B 按从高位到低位顺序各 个数位上的数字在十进制下的表示。


请注意, 输入中的所有数字都是十进制的。

输出格式


输出一行一个整数, 表示 X 进制数 A−B 的结果的最小可能值转换为十进 制后再模 1000000007 的结果。

样例输入

11
3
10 4 0
3
1 2 0

样例输出

94

样例说明


当进制为: 最低位 2 进制, 第二数位 5 进制, 第三数位 11 进制时, 减法 得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14 , 差值是 94。

评测用例规模与约定


对于 30% 的数据, N≤10;Ma,Mb≤8.


对于 100% 的数据, 2≤N≤1000;1≤Ma,Mb≤100000;A≥B.


运行限制


最大运行时间:1s

最大运行内存: 256M


题目思路


首先倒叙存储二进制整数A与B,按照贪心思想,当进制最小时为A-B的最小值,最小进制为max(a[i],b[i]) + 1,若进制比二小则为二进制。获得进制后直接计算十进制数字。


代码演示


#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,ma,mb,sa,sb,a[100005],b[100005];
ll ans;
int main() {
    cin >> n >> ma;
    for(int i = ma; i > 0; i--) {
      cin >> a[i];
  }
  cin >> mb;
  for(int i = mb; i > 0; i--) {
    cin >> b[i];
  }
  int len = max(ma,mb);
  for(int i = len; i > 0 ;i --) {
    int c = max(a[i],b[i]) + 1;
    c = max(2,c);
    ans = (ans * c + a[i] - b[i]) % 1000000007;
  }
  cout << ans ;
    return 0; 
}


F:统计子矩阵


问题描述


给定一个 N×M 的矩阵 A, 请你统计有多少个子矩阵 (最小 1×1, 最大 N×M) 满足子矩阵中所有数的和不超过给定的整数 KK ?

输入格式


第一行包含三个整数 N,M 和 K.


之后 N 行每行包含 M 个整数, 代表矩阵 A.

输出格式


一个整数代表答案。

样例输入

3 4 10
1 2 3 4
5 6 7 8
9 10 11 12

样例输出

19

样例说明


满足条件的子矩阵一共有 19 , 包含:


大小为 1×1 的有 10 个。


大小为 1×2 的有 3 个。


大小为 1×3 的有 2 个。


大小为 1×4 的有 1 个。


大小为 2×1 的有 3 个。


评测用例规模与约定


对于 30% 的数据, N,M≤20.


对于 70% 的数据, N,M≤100.


对于 100% 的数据, 1≤N,M≤500;0≤Aij≤1000;1≤K≤250000000


运行限制


最大运行时间:1s

最大运行内存: 256M


题目思路


先用二维前缀和存储矩阵信息,再用双指针来寻找正确答案。用i j分别表示一个区域的左右边界,p q来表示上下两个指针,p从上往下寻找q,一直到大小小于等于k,这时p q这片区域的行数q - p + 1就是子矩阵的个数。



代码演示


#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,m,k,a[505][505];
ll ans = 0;
int main() {
  cin >> n >> m >> k;
  for(int i = 1; i <= n; i++) {
    for(int j = 1; j <= m; j++) {
      cin >> a[i][j];
      a[i][j] =  a[i][j] + a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
    }
  }
    for(int i = 1; i <= m; i++) {
      for(int j = i; j <= m; j++) {
        for(int p = 1,q = 1; q <= n; q++) {
          while(p <= q && a[q][j] - a[q][i - 1] - a[p - 1][j] + a[p - 1][i - 1] > k) {
            p++;
        }
        if(p <= q) {
          ans +=(q - p + 1);
        }
      }
    }
  }
    cout << ans;
  return 0;
} 

相关文章
|
5月前
|
C++ 测试技术 算法
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题
|
10月前
|
机器学习/深度学习 算法 C++
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
249 0
|
22天前
|
测试技术 C++
[蓝桥杯 2023 省 B] 冶炼金属(c++)
[蓝桥杯 2023 省 B] 冶炼金属(c++)
27 0
|
3月前
|
Java C++ Python
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
29 0
|
3月前
|
Java 数据安全/隐私保护 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
20 1
|
3月前
|
Java C++ Python
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-161 Abbott’s Revenge(C++写法)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-161 Abbott’s Revenge(C++写法)
126 42
|
3月前
|
人工智能 测试技术 C++
第十五届蓝桥杯模拟赛B组(第二期)C++
第十五届蓝桥杯模拟赛B组(第二期)C++
97 0
第十五届蓝桥杯模拟赛B组(第二期)C++
|
4月前
|
人工智能 测试技术 C++
蓝桥杯15届第二次模拟赛C/C++详解
蓝桥杯15届第二次模拟赛C/C++详解
103 0
|
4月前
|
C++
蓝桥杯15届第二次模拟C++
蓝桥杯15届第二次模拟C++
31 0
|
4月前
|
算法 测试技术 编译器
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题