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



相关文章
|
7月前
|
存储 人工智能 测试技术
2020年第十一届蓝桥杯模拟赛解题报告
2020年第十一届蓝桥杯模拟赛解题报告
|
7月前
|
Python
湖南大学第十六届程序设计竞赛(重现赛)补题题解(更新中)
湖南大学第十六届程序设计竞赛(重现赛)补题题解(更新中)
37 0
|
算法 测试技术 C++
第十一届蓝桥杯第三场软件类省赛 C++ B组 题解(二)
第十一届蓝桥杯第三场软件类省赛 C++ B组 题解
161 0
|
算法 测试技术 C++
第十一届蓝桥杯第三场软件类省赛 C++ B组 题解(一)
第十一届蓝桥杯第三场软件类省赛 C++ B组 题解
108 0
|
存储 人工智能 测试技术
十四届蓝桥杯模拟赛第三期(二)
十四届蓝桥杯模拟赛第三期
139 0
|
算法
十四届蓝桥杯模拟赛第三期(一)
十四届蓝桥杯模拟赛第三期
447 0
|
存储 机器学习/深度学习 算法
【蓝桥杯集训·每日一题】AcWing1394. 完美牛棚
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 匈牙利算法
150 0
|
机器学习/深度学习
【蓝桥杯集训·每日一题】AcWing 4496. 吃水果
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 求组合数
76 0
|
移动开发 决策智能
【蓝桥杯集训·每日一题】AcWing 4005. 取石子游戏
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 1. 正解 2. 打表找规律 2、时间复杂度 3、代码详解 三、知识风暴 博弈论
133 0
下一篇
DataWorks