2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(下)

简介: 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)

6. 核酸日期

问题描述

如果周一做核酸,周二显示核酸天数为 1 天,周三显示 2 天,以此类推,周六显示 5 天,周日显示 6 天。

小蓝在某一天做了一次核酸,请问他的核酸显示为几天。已知做核酸和查看核酸不是在同一天,而且相差不超过 6 天(显示的数为 1 到 6 之间的数)。

输入格式

输入第一行包含一个整数 s ,表示小蓝做核酸是周几。 s 为 1 到 6 依次表示周一到周六,s 为 7 表示周日。

第二行包含一个整数 t ,表示查看核酸是周几。 t 为 1 到 6 依次表示周一到周六,t 为 7 表示周日。

输出格式

输出一行包含一个整数,表示答案。

样例输入

5

2

样例输出

4

评测用例规模与约定

对于所有评测用例,1 < = s , t < = 7

参考答案

判断一下是不是同一周,如果是就直接做差,不是就加7再做差

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
int main() {
    int a, b;
    cin >> a >> b;
    if (b > a) {
        cout << b - a << endl;
    } else {
        cout << b + 7 - a << endl;
    }
    return 0;
}


7. 英文转换

问题描述

输入一个由小写英文字母组成的字符串,请将其中的元音字母(a, e, i, o, u)转换成大写,其它字母仍然保持小写。

输入格式

输入一行包含一个字符串。

输出格式

输出转换后的字符串。

样例输入

lanqiao

样例输出

lAnqIAO

评测用例规模与约定

对于所有评测用例,字符串的长度不超过100。

参考答案

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
int main() {
    string a;
    cin >> a;
    for (int i = 0; i < a.size(); i++) {
        if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u') {
            cout << (char) (a[i] - 'a' + 'A');
        } else {
            cout << a[i];
        }
    }
    cout << endl;
    return 0;
}


8. 充电器

问题描述

小蓝有一个充电器,可以使用不同的电压和电流充电。

给定充电器工作的记录,请计算在这个记录期间总共通过充电传输了多少电能。

输入格式

输入第一行包含一个整数 n , 表示记录的条数。

接下来 n 行,每行包含一个时刻 T 和两个非负整数 U, I,表示在时刻 T 充电电压变为 U(单位伏),电流变为 I(单位A)。最后一行满足 U 和 I 均为 0,在前面的行中也可能出现 U、I 为 0 的情况。其中时间表示为 HH:MM:SS 的格式,时分秒分别用两位十进制数表示(补前导零)。

输入保证时刻依次递增且在 00:00:00 至 23:59:59 的区间内,不用考虑跨过零点充电的情况。

输出格式

输出一个整数,表示总共通电的电能为多少焦耳,其中 1 焦耳等于 1 伏乘以1 安乘以 1 秒。

样例输入

3

12:00:00 12 1

12:01:02 5 2

12:01:10 0 0

样例输出

824

评测用例规模与约定


对于所有评测用例,1 < = n < = 100 , 0 < = U , I < = 100


参考答案

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
int main() {
    ll ans = 0;
    int n;
    cin >> n;
    int V, I;
    int t;
    int a, b, c;
    cin >> a, cin.ignore(), cin >> b, cin.ignore(), cin >> c;
    t = 3600 * a + 60 * b + c;
    cin >> V >> I;
    for (int i = 0; i < n - 1; i++) {
        cin >> a, cin.ignore(), cin >> b, cin.ignore(), cin >> c;
        int t1 = 3600 * a + 60 * b + c;
        ans += (t1 - t) * V * I;
        cin >> V >> I;
        t = t1;
    }
    cout << ans << endl;
    return 0;
}


9. 全相等三角形

问题描述

给定一个字母矩阵,定义一个LQ三角形为某行中连续的几个字母、某列中连续的几个字母和一条45度的斜线中连续的几个字母组成的等腰直角三角形的边缘部分,其中每条边上的字母数量相等且至少为2 。


例如,对于下面的字母矩阵中,所有的字母 L 组成一个LQ三角形,所有字母 Q 组成了一个 LQ 三角形,所有字母 C 也组成了一个 LQ 三角形。


AAAAAAA  

ALLLLLA   

ALQQLAA   

ALQLAAC   

ALLAACC   

ALAACCC


如果一个 LQ 三角形边上的所有字母相等,则称为一个全相等三角形。以三个例子都是全相等三角形。

给定一个字母矩阵,请求其中有多少个全相等三角形


输入格式

输入第一行包含两个整数 n, m,分别表示字母矩阵的行数和列数。

接下来 n 行,每行 m 个大写字母,为给定的矩阵。

输出格式

输出一行,包含一个整数,表示答案。

样例输入1

3 4

AAAA

ALAQ

ALQQ

样例输出1

4

样例输入2

6 7

AAAAAAA

ALLLLLA

ALQQLAA

ALQLAAC

ALLAACC

ALAACCC


样例输出2

23

评测用例规模与约定


对于50 % 50\%50%的评测用例,1 < = n , m < = 10

对于所有评测用例,1 < = n , m < = 100


参考答案

数据不大,直接暴力的话不会超时。

使用双层循环遍历矩阵中每个元素,令每个遍历的元素为三角形的直角,并对上下左右不同大小的可能三角形进行判断并计数即可。


#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
vector<string> a;
bool inline check(int i, int j, int n, int m, int dir) {
    if (dir == 1) {
        for (int ii = i, jj = j; ii <= n && jj <= m; ii++, jj++) {
            if (a[ii][jj] != a[i][j])return false;
        }
    } else if (dir == 2) {
        for (int ii = i, jj = j; ii <= n && jj >= m; ii++, jj--) {
            if (a[ii][jj] != a[i][j])return false;
        }
    } else if (dir == 3) {
        for (int ii = i, jj = j; ii >= n && jj >= m; ii--, jj--) {
            if (a[ii][jj] != a[i][j])return false;
        }
    } else if (dir == 4) {
        for (int ii = i, jj = j; ii >= n && jj <= m; ii--, jj++) {
            if (a[ii][jj] != a[i][j])return false;
        }
    }
    return true;
}
int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        string temp;
        cin >> temp;
        a.push_back(temp);
    }
    ll ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int up = 0, down = 0, left = 0, right = 0;
            while (i - up >= 0 && a[i - up][j] == a[i][j])
                up++;
            while (i + down < n && a[i + down][j] == a[i][j])
                down++;
            while (j - left >= 0 && a[i][j - left] == a[i][j])
                left++;
            while (j + right < m && a[i][j + right] == a[i][j])
                right++;
            for (int ii = 1; ii < min(up, right); ii++) {
                if (check(i - ii, j, i, j + ii, 1))
                    ans++;
            }
            for (int ii = 1; ii < min(down, right); ii++) {
                if (check(i, j + ii, i + ii, j, 2))
                    ans++;
            }
            for (int ii = 1; ii < min(down, left); ii++) {
                if (check(i + ii, j, i, j - ii, 3))
                    ans++;
            }
            for (int ii = 1; ii < min(up, left); ii++) {
                if (check(i, j - ii, i - ii, j, 4))
                    ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}


10. 最小下标

问题描述


小蓝有一个由大写字母 ABCDEF 组成的字符串 S ,长度为 n,字符串的下标依次为 0 到 n-1 。

小蓝按照如下方法生成一个无限长的字符串:

首先选定一个 0 到 n-1 之间的数,作为初始下标。

从初始下标开始,将下标对应的字符加入到字符串的结尾,将字符的序号(A到F依次对应 1 到 6 )与下标相加作为新的下标值,如果下标大于等于 n,将其对 n 求余。重复此过程,即得到无限长的字符串。

例如,对于字符串 ACDF,当初始下标是 0 时,生成的字符串为:ACACACACAC…

再如,对于字符串 DCBA,当初始下标是 1 时,生成的字符串为:CDDDDDDDDD…

给定小蓝的字符串 S,请问当初始下标为多少时,生成的字符串最小。


输入一行包含一个字符串。

输出格式

输出一行,包含一个整数,为所求的下标,如果有多个下标满足要求,输出最小的那个。

样例输入1

DCBA

样例输出1

3

样例输入2

AAAA

样例输出2

0

评测用例规模与约定

image.png


参考答案

这题应该算是最小表示法的改编题,不理解的同学可以百度搜一下“最小表示法”。


即把原最小表示法的向后移动i,j指针的操作改成了使用getNext函数获取下一个下标,并借助vis标记访问过的下标。时间复杂度为O ( n ) )。这题如果没想出来最小表示法的话,如果使用类似bfs的爆搜应该也可以过70 % − 80 的数据。

#include <iostream>
#include <string>
#include <stack>
#include <map>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
using namespace std;
string str;
int n;
bool vis[1000005];
int inline getNext(int i) {
    return (i + str[i] - 'A' + 1) % n;
}
int main() {
    cin >> str;
    n = str.size();
    for (int i = 0; i < 1e6 + 5; i++)
        vis[i] = false;
    int i = 0, j = 1, len = 0, _i = 0, _j = 1;
    vis[0] = true, vis[1] = true;
    while (i < n && j < n && len < n) {
        int t = str[_i] - str[_j];
        if (!t) {
            _i = getNext(_i);
            _j = getNext(_j);
            len++;
        } else {
            if (t > 0) {
                int temp = i;
                while (temp != _i) {
                    vis[temp] = true;
                    temp = getNext(temp);
                }
                while (vis[i]) i++;
                vis[i] = true;
            } else {
                int temp = j;
                while (temp != _j) {
                    vis[temp] = true;
                    temp = getNext(temp);
                }
                while (vis[j]) j++;
                vis[j] = true;
            }
            _i = i, _j = j;
        }
    }
    cout << min(i, j) << endl;
    return 0;
}


其他


11.14: 蓝桥官网出排名了,刚看了下排名是我校第一名。(估计很多dl没来打模拟赛hh)

a662921696ca4a33913dee022deb2fda.png



相关文章
|
4月前
|
存储 人工智能 测试技术
2020年第十一届蓝桥杯模拟赛解题报告
2020年第十一届蓝桥杯模拟赛解题报告
|
4月前
|
测试技术 C语言
第十四届蓝桥杯B组第一期模拟题
第十四届蓝桥杯B组第一期模拟题
47 0
|
算法
十四届蓝桥杯模拟赛第三期(一)
十四届蓝桥杯模拟赛第三期
429 0
|
存储 人工智能 测试技术
十四届蓝桥杯模拟赛第三期(二)
十四届蓝桥杯模拟赛第三期
129 0
第14届蓝桥杯模拟赛 第2期
请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。请将这个数的十进制形式作为答案提交。
|
存储 算法
【蓝桥杯集训·每日一题】AcWing 3728. 城市通电
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 Prim算法
74 0
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第94场周赛
文章目录 第一题 AcWing 4870. 装物品 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4871. 最早时刻 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4872. 最短路之和 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
64 0
|
JavaScript BI
【蓝桥杯集训·周赛】AcWing 第96场周赛
文章目录 第一题 AcWing 4876. 完美数 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4877. 最大价值 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4878. 维护数组 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
79 0
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第 95 场周赛
文章目录 第一题 AcWing 4873. 简单计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4874. 约数 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4875. 整数游戏 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
97 0
|
存储 人工智能 算法
【蓝桥杯集训·最后一次周赛】AcWing 第 97 场周赛
文章目录 第一题 AcWing 4944. 热身计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4945. 比大小 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4946. 叶子节点 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
116 0