第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】

2024-04-01 1836阅读

第一题《日期统计》【枚举】

【问题描述】

小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示:

5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3

现在他想要从这个数组中寻找一些满足以下条件的子序列:

        1.子序列的长度为 8:

        2.这个子序列可以按照下标顺序组成一个 yyy,ymmdd 格式的日期,并且要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。

请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 年的日期。对于相同的日期你只需要统计一次即可。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

#include 
using namespace std;
int main() {
    int array[100] = {
        5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7,
        5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5, 8, 6, 1, 8, 3, 0, 3, 7, 9,
        2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3,
        8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6,
        1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3
    };
    int daysInMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int ans = 0;
    for (int month = 1; month > n >> m; res = 0;
        for (int i = 1; i  c;
                g[i][j] = c - '0';
            }
        dfs_0(0, 0);//从一个外海方格开始dfs
        cout  k;
    cin >> p >> st >> ed;
    vector ps, pe;
    for (int i = 0; i > 1;
            if(pe[mid] >= X) r = mid;
            else l = mid + 1;
        }
        if(pe[l] >= X) ans += pe.size() - l;
    }
    cout  n >> k;
    r[0] = 1, l[n + 1] = n;
    priority_queue h;
    for (int i = 1; i > v[i], l[i] = i - 1, r[i] = i + 1, h.push({v[i], i});
    while (k --) {
        auto p = h.top(); h.pop();
        if (p.first != v[p.second]) h.push({v[p.second], p.second}), k ++;
        else del(p.second);
    }
    int head = r[0];
    while (head != n + 1) {
        cout i+1,加上i-1->i+1
        if (i && i != k - 1) res += get(q[i - 1], q[i + 1]) - get(q[i - 1], q[i]) - get(q[i], q[i + 1]);
        // 跳过i(i是左端点),等同于砍掉i->i+1
        else if (!i) res -= get(q[i], q[i + 1]);
        // 跳过i(i是右端点),等同于砍掉i-1->i
        else res -= get(q[i - 1], q[i]);
        printf("%lld ", res);
    }
    puts("");
    return 0;
}

第十题《砍树》【LCA+树上差分】

【题目描述】

第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】

【输入格式】

输入共 n+m 行,第一行为两个正整数 n,m。

后面 n−1 行,每行两个正整数 第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】,第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】 表示第 i 条边的两个端点。

后面 m 行,每行两个正整数 第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】,第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】

【输出格式】

一行一个整数,表示答案,如有多个答案,输出编号最大的一个。

【数据范围】

对于 30% 的数据,保证 1

对于 100% 的数据,保证 1 ,1 ≤ m ≤ 第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】

【输入样例】

6 2

1 2

2 3

4 3

2 5

6 5

3 6

4 5

【输出样例】

4

【样例解释】

断开第 2 条边后形成两个连通块:{3,4},{1,2,5,6},满足 3 和 6 不连通,4 和 5 不连通。

断开第 4 条边后形成两个连通块:{1,2,3,4},{5,6},同样满足 3 和 6 不连通,4 和 5 不连通。

4 编号更大,因此答案为 4。

【思路】

题解来源:4963. 砍树 - AcWing题库

第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】

【代码】

#include
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 200010;
int n, m;
std::vector e[N];
int depth[N], fa[N][32];
int f[N];
int root;
int ans;
map mp;
void bfs(int root)
{
    ms(depth, 0x3f);
    depth[0] = 0, depth[root] = 1;
    queue q;
    q.push(root);
    while (!q.empty()) {
        auto t = q.front();
        q.pop();
        for (int j : e[t]) {
            if (depth[j] > depth[t] + 1) {
                depth[j] = depth[t] + 1;
                q.push(j);
                fa[j][0] = t;
                for (int k = 1; k = 0; k--) {
        if (depth[fa[a][k]] >= depth[b]) {
            a = fa[a][k];
        }
    }
    if (a == b) return a;
    for (int k = 15; k >= 0; --k) {
        if (fa[a][k] != fa[b][k]) {
            a = fa[a][k];
            b = fa[b][k];
        }
    }
    return fa[a][0];
}
int dfs(int u, int fa) {
    int res = f[u];
    for (auto v : e[u]) {
        if (v == fa) continue;
        int g = dfs(v, u);
        if (g == m) {
            ans = max(ans, mp[ {v, u}]);
        }
        res += g;
    }
    return res;
}
void solve()
{
    cin >> n >> m;
    for (int i = 0; i > u >> v;
        mp[ {u, v}] = mp[ {v, u}] = i + 1;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    bfs(1);
    for (int i = 0; i > u >> v;
        int z = lca(u, v);
        f[u]++;
        f[v]++;
        f[z] -= 2;
    }
    dfs(1, -1);
    cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]