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

牛客刷题-Day23

牛客刷题-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;
}
http://www.rkmt.cn/news/55304.html

相关文章:

  • 当 Git 账号密码输错后,凭证会被缓存下来怎么办?
  • 基于日志的邮件安全事件检测:从异常行为到攻击溯源
  • Playwright自动化测试框架与AI智能体应用公开课
  • 学习率调度器 (Learning Rate Scheduler)
  • 宏觀對沖的組合管理 Portfolio Management for Macro Hedging
  • dynamic_rnn转nn.GRU详细记录
  • 2025 最新推荐海外仓服务平台榜单:覆盖欧美东南亚等核心市场,美国 / 英国 / 德国 / 法国海外仓/换标 / 维修 / 检测优质服务商权威测评
  • Agent Dart证书验证漏洞深度解析
  • 2025年北京集团法律顾问服务权威推荐榜单:私人法律顾问/高级法律顾问/社区法律顾问服务精选
  • 2025年合肥外呼系哪家好--外呼系统推荐
  • 2025年四川搭建网站维护服务权威推荐:四川网站搭建平台/四川企业网站开发/四川企业官网搭建公司源头机构精选
  • 《浙商》杂志|协作方能共赢,湘湖论剑网易专场对接会描绘AI人机共生新蓝图
  • GESP C++ 二级真题 (2025.09) 知识点精讲
  • ESP32 C3使用ESP32-BLE-Keyboard的问题每次都要添加才能使用
  • MLGO微算法科技时空卷积与双重注意机制驱动的脑信号多任务分类算法
  • 2025耐高锰酸钠富辛环氧涂料加工厂综合评估:高性能厚浆环氧涂料涂料/乙烯基防水防腐涂/乙烯基玻璃鳞片涂料专业供应商推荐
  • 2025长沙考公面试机构测评:这5家实力最强,比较好的长沙考公面试口碑排行优选品牌推荐与解析
  • 小白也能看懂的RLHF:基础篇 - AI
  • 数据结构-线段树
  • 第十一章 泛型算法
  • 实用指南:链表-双向链表【node3】
  • 2025年复合涤纶布优质厂家权威推荐榜单:涂层涤纶布/阻燃涤纶布/防水涤纶布源头厂家精选
  • List相关知识点
  • 【山东省物联网协会主办,IEEE出版】2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025)
  • vxe-table 如何实现拖拽行数据排序,并对拖拽后进行提示框二次确认是否允许拖拽
  • SOLID原则在React中的应用实践
  • 绘图工具
  • 2025 年 11 月离心机厂家推荐排行榜,台式低速大容量离心机,血液离心机,台式低速离心机,台式指针式离心机,台式离心机,小高速离心机,低速微电脑控制离心机,六乘五十毫升离心机,高速离心机公司推荐
  • 深入解析:BERT,GPT,ELMO模型对比
  • 2025年颗粒活性炭订制厂家权威推荐榜单:活性炭过滤/煤质活性炭/粉末活性炭源头厂家精选