当前位置: 首页 > 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.jsqmd.com/news/45666/

相关文章:

  • 大厂都在用的测试基础设施:深度解析Dify工作流引擎的设计哲学与最佳实践
  • 2025 年 11 月手工冰淇淋厂家推荐排行榜,0添加冰淇淋,低脂冰淇淋,低糖冰淇淋,巧克力冰淇淋,国潮冰淇淋,磨巧冰淇淋厂家推荐
  • 当 Git 账号密码输错后,凭证会被缓存下来怎么办?
  • 素数与素数筛
  • oop-实验3 - fg
  • 2025一对一教育机构口碑排行榜:最新家教辅导平台深度解析
  • 11.20模拟赛div-3
  • 基于日志的邮件安全事件检测:从异常行为到攻击溯源
  • Playwright自动化测试框架与AI智能体应用公开课
  • 火山引擎Data Agent赋能金融行业,打造智能投顾与精准营销新范式
  • 学习率调度器 (Learning Rate Scheduler)
  • why did I speak English
  • 2025年涡轮球阀pvdf管生产厂家权威推荐榜单:涡轮蝶阀pvdf管/涡轮蝶阀pvdf管/热熔球阀pvdf管源头厂家精选
  • Java 类加载机制与反射
  • 面向对象程序设计—第一章作业总结
  • 2025年电子散件手工源头厂家权威推荐榜单:灯具加工外发/手工编织加工/电子产品手工加工源头厂家精选
  • 2025年北京高压配电室检测公司权威推荐榜单:北京配电室检测项目/北京配电室加载检测/北京配电室防雷检测服务机构精选
  • 宏觀對沖的組合管理 Portfolio Management for Macro Hedging
  • 2025 电加热器厂家最新推荐排行榜:实力制造商深度解析,覆盖多场景加热设备优质解决方案
  • 技术筑牢供应链安全防线:从全链路防控到体系化治理
  • 2025 运营商数据分类分级需求演进与核心厂商全景解析
  • dynamic_rnn转nn.GRU详细记录
  • NAS、对象存储与 JuiceFS:百亿量化基金的存储选型实践
  • 2025年风机联云端批发厂家权威推荐榜单:风机物联网云平台/风机物联网/小型物联网风系统平台源头厂家精选
  • CF2172H Shuffling Cards with Problem Solver 68!
  • STM32HAL库通用定时器学后笔记 - 实践
  • 2025年手工雕刻石碑生产厂家权威推荐榜单:汉白玉墓碑/石碑/汉白玉石碑源头厂家精选
  • 2025不容错过!可燃气体报警器十大实力厂家大盘点
  • 记基于现有项目架构通过ai生成的一个语音助手功能开发设计文档
  • 2025 最新推荐海外仓服务平台榜单:覆盖欧美东南亚等核心市场,美国 / 英国 / 德国 / 法国海外仓/换标 / 维修 / 检测优质服务商权威测评