当前位置: 首页 > news >正文

梦熊联盟:202505基础语法-题解

202505基础语法-题解

T1 - 九的倍数

解法
对于 9 的倍数,只需要判定其各位的数码和是否为 9 的倍数即可。
例如判断一个数是不是 9 的倍数,只要判断其各位数字之和是不是 9 的倍数,因为一个数能被 9 整除当且仅当它的各位数字之和能被 9 整除。
因此将输入的数当作字符串读入,把每一位的数码和相加,判断是否为 9 的倍数即可。

Code

#include <bits/stdc++.h>
using namespace std;
long long ans;
int main() {int t;cin >> t;while (t--) {string s;cin >> s;int ans = 0;for (int i = 0; i < s.length(); i++)ans += s[i] - '0';if (ans % 9)cout << "No\n";elsecout << "Yes\n";}
return 0;
}

T2 - 直线

解法
容易发现两个点的斜率为某特定值时,当且仅当它们的横纵坐标相加的值相同。
因为(此处应有公式推导,但原始题解未给出),所以可以利用这一性质解题。
利用桶计算每个横纵坐标之和的值出现了多少次,由于值域范围较大,可以利用map等 STL 工具进行优化,时间复杂度为 O (n)。

Code

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;
char a[5005];
int n;
int main() {scanf("%s", a + 1);n = strlen(a + 1);string s;int l = 1, r = n, t = 0;while (l <= r) {if (a[l] < a[r]) {cout << a[l];l++;} else {if (a[l] > a[r]) {cout << a[r];r--;} else {int ll = l, rr = r;while (ll <= rr && a[ll] == a[rr]) {ll++;rr--;}if (a[ll] <= a[rr]) {cout << a[l];l++;} else {cout << a[r];r--;}}}}
return 0;
}

T3 - 最小的串

解法
我们很容易想出一个贪心思路,就是每次从头和尾中取较小的字符。但问题来了,如何处理头尾相等的情况呢?
可以选择不断往里找,直到找到两个不相同的位置,比较这两个数,取小的那一边的头或尾即可。时间复杂度为 O (n²),如果实现得更精细可以做到 O (n)。

Code

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;
char a[5005];
int n;
int main() {scanf("%s", a + 1);n = strlen(a + 1);string s;int l = 1, r = n, t = 0;while (l <= r) {if (a[l] < a[r]) {cout << a[l];l++;} else {if (a[l] > a[r]) {cout << a[r];r--;} else {int ll = l, rr = r;while (ll <= rr && a[ll] == a[rr]) {ll++;rr--;}if (a[ll] <= a[rr]) {cout << a[l];l++;} else {cout << a[r];r--;}}}}
return 0;
}

T4 - 砝码

解法
如何用最少的砝码表示出尽量多的重量?
从二进制的角度,砝码重量一定是形如 2⁰, 2¹, 2², ... 以此类推。
从这个角度,为了能表示出 1 到 n 中的所有重量,最终答案前若干个砝码一定形如 2⁰, 2¹, ..., 2^k,之后的每个数都在某个范围内(例如样例中的数值可以表示成特定组合)。
我们可以枚举 k 的大小,那么剩下所有的数最大的值最小可以是某个值,注意 k 的取值范围且答案为某个表达式,因为(此处应有公式推导,但原始题解未给出),所以单次复杂度为 O (log n)。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long int64;
void work() {long long n, m;cin >> n >> m;long long ans = 1e18;for (int i = 0; i <= 30; i++) {if (i + 1 > m)continue;long long D = (1ll << i);long long C = (1ll << (i + 1)) - 1;if (C >= n) {ans = min(ans, D);continue;}long long E = m - (i + 1);if (E == 0)continue;long long F = (n - C) / E + ((n - C) % E > 0);if (F > C)continue;ans = min(ans, max(F, D));}if (ans == 1e18)cout << "-1\n";elsecout << ans << '\n';}
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);int T;std::cin >> T;for (; T--;)work();
return 0;
}

练习:

https://our.oj.fmcraft.top/contest.php?cid=1003

http://www.xdnf.cn/news/395659.html

相关文章:

  • 沐言智语开源Muyan-TTS模型,词错率、语音质量评分都处于开源模型的一线水平,推理速度相当快~
  • Go语言运算符详解
  • No module named ‘xxx’报错原因及解决方式
  • DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002
  • css背景相关
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • 进程间关系与守护进程
  • Quantum convolutional nerual network
  • 责任链模式
  • 苍穹外卖(数据统计–Excel报表)
  • C语言常见的文件操作函数总结
  • 互联网大厂Java求职面试:电商商品推荐系统中的AI技术应用
  • 超标量处理器设计4-分支预测
  • TypeScript 装饰器高级用法详解
  • Kubernetes排错(十四):Pod状态异常排查手册
  • 深入理解 TypeScript 中 unknown 类型:安全性与使用指南
  • 深度学习:系统性学习策略(二)
  • OBS studio 减少音频中的杂音(噪音)
  • LLM初识
  • 【CTF】Linux Shell RCE绕过(bypass)技术总结
  • 【Tools】VScode远程调试linux服务器(打断点可视化界面方式)
  • 【文本数据找重复记录】2021-11-23
  • C++编程中,什么是野指针?
  • SpringBoot3.0 分组校验
  • jsAPI
  • Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
  • BI PaaS化实践:衡石如何通过可插拔数仓加速企业数据湖仓一体?
  • UNet网络 图像分割模型学习
  • 用户线程和守护线程
  • 机器学习极简入门:从基础概念到行业应用