尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

牛客刷题-Day23

牛客刷题-Day23
📅 发布时间:2026/6/21 15:58:14
模拟、枚举与贪心 https://ac.nowcoder.com/acm/contest/20960?from=acdiscuss

牛客刷题-Day23

今日刷题:\(1041-1045\)

1041 习题-回文数

6a5aaedf-1554-4dc8-8f4f-6888032f5a2d

解题思路

构成回文数的情况:

  1. 出现次数为奇数的数最多一个;
  2. 在情况一的基础上,\(0\) 出现次数不为零且有出现次数至少为 \(2\) 的数,或者 \(0\) 出现次数为 \(1\) 无其余数。

当可以构成回文数,要求回文数最小,因此在不存在前导零的情况下,首位为不为零的最小数,若存在 \(0\),则在安排完首位之后先安排 \(0\),之后依次按照递增的顺序安排数字。

C++ 代码

#include <bits/stdc++.h>
using namespace std;
const int N = 10, M = 110;int cnt[N];
int s[N];int main() {int flag = 0, total = 0, t = -1;for (int i = 0; i < N; i++) {scanf("%d", &cnt[i]);if (cnt[i] % 2) {flag++;t = i;}total += cnt[i]; // 总个数}if (flag > 1) {printf("-1\n");return 0;}if (cnt[0]) {flag = 0;for (int i = 1; i < N; i++)if (cnt[i] > 1)flag = 1;if (!flag) {if (cnt[0] > 1) {printf("-1\n");return 0;}}}int idx = 1;for (int i = 1; i < N; i++) {if (cnt[i] && cnt[i] > 1) {while (cnt[i] > 1) {s[idx] = i, s[total + 1 - idx] = i;cnt[i] -= 2;idx++;if (cnt[0]) {while (cnt[0] > 1) {s[idx] = 0, s[total + 1 - idx] = 0;cnt[0] -= 2;idx++;}}}}}if (t != -1)s[idx] = t;for (int i = 1; i <= total; i++)printf("%d", s[i]);return 0;
}

1043 习题-[NOIP1999]回文数

b1786dc3-fd14-4278-acba-dfe2f45740ae

解题思路

牛客的题目描述不是很清晰:\(n\) 的取值为 \([2,10]\),或者 \(n=16\);其次输入的数字长度不超过 \(100\)。

按照题目的描述模拟加法过程,当超过 \(30\) 次之后的数仍不是回文数,则输出 Impossible!。
因为两个同样位数的数加和最多多一位,因此如果使用数组,则最多进 \(30\) 位。另外需要注意 \(16\) 进制的数会使用大写字母 \([A,F]\)。

C++ 代码

#include <bits/stdc++.h>
using namespace std;int n;
string s;
vector<int> num;vector<int> add(vector<int> num, int k) {vector<int> a = num, b, c;for (int i = num.size() - 1; i >= 0; i--)b.push_back(num[i]);int t = 0;for (int i = 0; i < num.size(); i++) {t += a[i] + b[i];c.push_back(t % k);t /= k;}if (t)c.push_back(1);return c;
}int solve(vector<int> &num, int k) { // k 进制int cnt = 0;while (1) {bool flag = true;for (int i = 0, j = num.size() - 1; i <= j; i++, j--) {if (num[i] != num[j]) {flag = false;break;}}if (flag)return cnt;num = add(num, k);cnt++;if (cnt > 30)break;}return cnt;
}int main() {cin >> n >> s;for (int i = s.size() - 1; i >= 0; i--) {if (s[i] >= '0' && s[i] <= '9') {num.push_back(s[i] - '0');} else {num.push_back(s[i] - 'A' + 10);}}int step = solve(num, n);if (step <= 30) {printf("STEP=%d\n", step);return 0;}puts("Impossible!");return 0;
}

1045 习题-I love you

7c9836dc-2ea5-40f1-bb19-326606cf3471

解题思路

\(f_{i,j}\) 表示 \(t[0-j-1]\) 在 \(s[0-i-1]\) 的匹配个数,状态计算如下:

  • 初始化:\(f_{0,0}=1\),空序列匹配。
  • 若 \(s_{i-1}==t_{j-1}\),则 \(f_{i,j}+=f_{i,j}\)。

在实现时对数组进行降维。

C++ 代码

#include <bits/stdc++.h>
using namespace std;
const int N = 10;string s;
int f[N];int main() {f[0] = 1;getline(cin, s);string t = "iloveyou";for (int i = 0; s[i]; i++) {bool flag = true;for (int j = 0; t[j]; j++)if (s[i] == t[j] || s[i] - 'A' + 'a' == t[j]) {f[j + 1] = (f[j + 1] + f[j]) % 20010905;}}printf("%d\n", f[8]);return 0;
}

本文来自博客园,作者:Cocoicobird,转载请注明原文链接:https://www.cnblogs.com/Cocoicobird/p/19247443

相关新闻

  • 当 Git 账号密码输错后,凭证会被缓存下来怎么办?
  • 基于日志的邮件安全事件检测:从异常行为到攻击溯源
  • Playwright自动化测试框架与AI智能体应用公开课

最新新闻

  • 福州市仓山区吃烧烤推荐去哪家?本地实测测评 - 资讯速览
  • 全国医疗纠纷律师推荐:河北雄奕律师事务所主任齐凤,医法双修15年 - 资讯速览
  • 2026年天水学员咨询众智商学院PMP课程怎么核对官方入口? - 众智商学院官方
  • Ultimate ASI Loader:游戏MOD管理的终极解决方案
  • 基于i.MX53与MC1323x的Android RF4CE遥控器开发实战
  • 2026安徽省合肥市国防预备班招生简章最新发布,低分初三生入伍升学双路径 - cc江江

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号