第十四届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)

02-26 1032阅读

目录

  • 试题 A. 日期统计
    • 1.题目描述
    • 2.解题思路
    • 3.模板代码
    • 试题 B.01 串的熵
      • 1.题目描述
      • 2.解题思路
      • 3.模板代码
      • 试题 C. 冶炼金属
        • 1.题目描述
        • 2. 解题思路
        • 3.模板代码
        • 试题 D. 飞机降落
          • 1.题目描述
          • 2. 解题思路
          • 3.模板代码
          • 试题 E. 接龙数列
            • 1.题目描述
            • 2. 解题思路
            • 3.模板代码
            • 试题 F. 岛屿个数
              • 1.题目描述
              • 2. 解题思路
              • 3.模板代码
              • 试题 G. 子串简写
                • 1.题目描述
                • 2. 解题思路
                • 3.模板代码
                • 试题 H.整数删除
                  • 1.题目描述
                  • 2. 解题思路
                  • 3.模板代码
                  • 试题 I. 景区旅游
                    • 1.题目描述
                    • 2. 解题思路
                    • 3.模板代码
                    • 试题 J. 砍树
                      • 1.题目描述
                      • 2. 解题思路
                      • 3. 模板代码

                        目前除 B、F题未补,其余题均已更完,经非官方数据测试均可AC。欢迎交流

                        第十四届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)
                        (图片来源网络,侵删)

                        试题 A. 日期统计

                        1.题目描述

                          小蓝现在有一个长度为 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 8 8;
                          1. . 这个子序列可以按照下标顺序组成一个 y y y y m m d d yyyymmdd yyyymmdd 格式的日期,并且

                            要求这个日期是 2023 2023 2023 年中的某一天的日期,例如 20230902 , 20231223 20230902,20231223 20230902,20231223。

                            y y y y yyyy yyyy 表示年份, m m mm mm 表示月份, d d dd dd 表示天数,当月份或者天数的长度只

                            有一位时需要一个前导零补充。

                            请你帮小蓝计算下按上述条件一共能找到多少个不同 的 2023 年的日期。

                          对于相同的日期你只需要统计一次即可。

                          2.解题思路

                            考虑八层循环枚举一下,中间需要进行减枝加快搜索步骤,不建议写 dfs,不然就像我一样在考场写烂,注意答案需要去重,答案为235。

                          3.模板代码

                            暂更

                          试题 B.01 串的熵

                          1.题目描述

                            没学过数学,暂更

                          2.解题思路

                          3.模板代码

                          试题 C. 冶炼金属

                          1.题目描述

                            小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个

                          炉子有一个称作转换率的属性 V V V, V V V 是一个正整数,这意味着消耗 V V V 个普通金

                          属 O O O 恰好可以冶炼出一个特殊金属 X X X,当普通金属 O O O 的数目不足 V V V 时,无法

                          继续冶炼。

                            现在给出了 N N N 条冶炼记录,每条记录中包含两个整数 A A A 和 B B B,这表示本次投入了 A A A 个普通金属 O O O,最终冶炼出了 B B B 个特殊金属 X X X。每条记录都是独立

                          的,这意味着上一次没消耗完的普通金属 O O O 不会累加到下一次的冶炼当中。

                            根据这 N N N 条冶炼记录,请你推测出转换率 V V V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。

                          2. 解题思路

                            如果看过样例的话,显然答案两个上下界都是可以直接二分出来的。因为式子的结构都是 A C = B \frac{A}{C} = B CA​=B。 A A A 是不变的,我们先考虑二分求最小的 C C C,因为需要保证所有式子的 B B B 都不变,如果 C C C 太小,显然会有某一组的 B B B 增大,所以需要保证每一组都符合a[i]/x = B。

                          3.模板代码

                          #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;
                          int a[N], b[N];
                          bool check(LL x) {
                          	for (int i = 1; i 
                          		if (a[i] / x  b[i]) return false;
                          	}
                          	return true;
                          }
                          bool check2(LL x) {
                          	for (int i = 1; i 
                          		if (a[i] / x  n;
                          	for (int i = 1; i > a[i] >> b[i];
                          	LL l = 1, r = 1e9;
                          	while (l > 1;
                          		if (check(mid)) r = mid;
                          		else l = mid + 1;
                          	}
                          	int s = r;
                          	l = 1, r = 1e9;
                          	while (l > 1;
                          		if (check2(mid)) l = mid;
                          		else r = mid - 1;
                          	}
                          	cout 
                          	ios_base :: sync_with_stdio(false);
                          	cin.tie(0); cout.tie(0);
                          	int t = 1;
                          	while (t--)
                          	{
                          		solve();
                          	}
                          	return 0;
                          }
                          
                          	cin  n;
                          	for (int i = 0; i > b[i] >> c[i];
                          	std::vector d(n);
                          	auto check = [&]() {
                          		int v = 0;
                          		for (int i = 0; i  x;
                          		b[i] = x % 10;
                          		string s = to_string(x);
                          		a[i] = s[0] - '0';
                          	}
                          	for (int i = 1; i 
                          		f[b[i]] = max(f[b[i]], f[a[i]] + 1);
                          	}
                          	int ans = 0;
                          	for (int i = 0; i 
                          	ios_base :: sync_with_stdio(false);
                          	cin.tie(0); cout.tie(0);
                          	int t = 1;
                          	while (t--)
                          	{
                          		solve();
                          	}
                          	return 0;
                          }
                          
                          	cin  k  s >> c1 >> c2;
                          	int n = s.size();
                          	s = '?' + s;
                          	for (int i = 1; i 
                          		a[i] = (s[i] == c2);
                          		a[i] += a[i - 1];
                          	}
                          	LL ans = 0;
                          	for (int i = 1; i + k - 2  k;
                          	priority_queueq;
                          	for (int i = 1; i 
                          		LL v;
                          		cin > v;
                          		q.push({v, i});
                          		pre[i] = i - 1;
                          		ne[i] = i + 1;
                          	}
                          	int g = n - k;
                          	while (q.size() > g) {
                          		auto p = q.top(); q.pop();
                          		LL v = p.first, ix = p.second;
                          		if (cnt[ix]) {
                          			q.push({v + cnt[ix], ix});
                          			cnt[ix] = 0;
                          		} else {
                          			int l = pre[ix], r = ne[ix];
                          			cnt[l] += v;
                          			cnt[r] += v;
                          			ne[l] = r;
                          			pre[r] = l;
                          		}
                          	}
                          	std::vector a(n + 1);
                          	for (int i = 0; i > n >> m;
                              for (int i = 0; i > u >> v >> c;
                                  e[u].push_back({v, c});
                                  e[v].push_back({u, c});
                              }
                              bfs(1);
                              dfs(1, -1);
                              std::vector g(m + 1);
                              for (int i = 1; i > g[i];
                              LL ans = 0;
                              for (int i = 1; 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 
                          	ios_base :: sync_with_stdio(false);
                          	cin.tie(0); cout.tie(0);
                          	int t = 1;
                          	while (t--)
                          	{
                          		solve();
                          	}
                          	return 0;
                          }
                          
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]