A.4806. 首字母大写
题目描述:
给定一个由大小写字母构成的单词。
如果单词的首字母为小写字母,则请你将该首字母转换为对应大写字母。
如果单词的首字母为大写字母,则不做任何变化。
输出最终的单词。
输入格式:
一个由大小写字母构成的非空字符串,表示给定单词。
输出格式
输出最终的单词。
数据范围
前 3 个测试点满足,输入单词长度范围
[
1
,
10
]
[1,10]
[1,10]。
所有测试点满足,输入单词长度范围
[
1
,
1000
]
[1,1000]
[1,1000]。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
算法模拟
Ac code
| #include <iostream> |
| #include <cstring> |
| #include <algorithm> |
| |
| using namespace std; |
| |
| int main() |
| { |
| string s; cin >> s; |
| |
| if(s[0] <= 'z' && s[0] >= 'a') s[0] -= 32; |
| |
| cout << s << endl; |
| |
| return 0; |
| } |
运行结果
| 结果: Accepted |
| 通过了 10/10个数据 |
| 运行时间: 10 ms |
| 运行空间: 220 KB |
B.4807. 找数字
题目描述:
给定一个正整数
m
m
m 和一个非负整数
s
s
s。
请你找到长度为 m 且各位数字之和为
s
s
s 的最小和最大非负整数。
要求所求非负整数不得包含前导零。
输入格式:
共一行,两个整数
m
,
s
m,s
m,s。
输出格式
在一行内输出满足条件的最小和最大非负整数。
如果无解,则输出 -1 -1
。
数据范围
前
6
6
6 个测试点满足
1
≤
m
≤
3
1≤m≤3
1≤m≤3。
所有测试点满足
1
≤
m
≤
100
,
0
≤
s
≤
900
1≤m≤100,0≤s≤900
1≤m≤100,0≤s≤900。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
算法 贪心、数学、构造
| 特判:数位和最大为9 * m, 最小为 1 ,如果m = 1, 数位和可以是 0 |
| |
| 构造最小数:从最后一位到第二位进行构造,每一位是 t = max(9, sum - 1), sum -= t |
| 因为至少要留 1 给最高位,最后最高位就是 sum |
| |
| 构造最大数:从第一位开始构造,每一位是 t = min(9, sum), sum -= t |
Ac code
| #include<bits/stdc++.h> |
| using namespace std; |
| |
| int main() |
| { |
| int m, s; |
| cin >> m >> s; |
| |
| if(s > 9 * m || m > 1 && s < 1) cout << -1 << ' ' << -1; |
| else |
| { |
| vector<int> a(m + 1); |
| |
| |
| int sum = s; |
| for(int i = m; i >= 2; i --) |
| { |
| int t = min(9, sum - 1); |
| a[i] = t; |
| sum -= t; |
| } |
| a[1] = sum; |
| |
| |
| for(int i = 1; i <= m; i ++) cout << a[i]; |
| cout << ' '; |
| |
| a.clear(); |
| |
| |
| sum = s; |
| for(int i = 1; i <= m; i ++) |
| { |
| int t = min(9, sum); |
| a[i] = t; |
| sum -= t; |
| } |
| |
| |
| for(int i = 1; i <= m; i ++) cout << a[i]; |
| } |
| |
| return 0; |
| } |
运行结果
| 结果: Accepted |
| 通过了 22/22个数据 |
| 运行时间: 26 ms |
| 运行空间: 216 KB |
C.4808. 构造字符串
题目描述:
给定一个长度为
n
n
n 的由小写字母构成的字符串
t
t
t 以及一个整数
k
k
k。
请你构造一个字符串
s
s
s,要求:
1.字符串
s
s
s 恰好有
k
k
k 个子串等于字符串
t
t
t。
2.字符串
s
s
s 的长度尽可能短。
保证一定存在唯一解。
输入格式:
第一行包含两个整数
n
,
k
n,k
n,k。
第二行包含一个长度为
n
n
n 的由小写字母构成的字符串
t
t
t。
输出格式
输出满足条件的字符串
s
s
s。
保证一定存在唯一解。
数据范围
前 3 个测试点满足
1
≤
n
,
k
≤
4
1≤n,k≤4
1≤n,k≤4。
所有测试点满足
1
≤
n
,
k
≤
50
1≤n,k≤50
1≤n,k≤50。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
算法贪心、KMP(模拟)
Ac code 1KMP求next数组
O
(
n
)
O(n)
O(n)
| |
| #include<iostream> |
| using namespace std; |
| const int N = 55; |
| |
| int n, k; |
| int ne[N]; |
| char p[N]; |
| |
| int main() |
| { |
| scanf("%d%d", &n, &k); |
| scanf("%s", p + 1); |
| |
| for(int i = 2, j = 0; i <= n; i ++) |
| { |
| while(j && p[i] != p[j + 1]) j = ne[j]; |
| if(p[i] == p[j + 1]) j ++; |
| ne[i] = j; |
| } |
| |
| printf("%s", p + 1); |
| |
| for(int i = 1; i <= k - 1; i ++) |
| printf("%s", p + 1 + ne[n]); |
| |
| return 0; |
| } |
运行结果
| 结果: Accepted |
| 通过了 15/15个数据 |
| 运行时间: 15 ms |
| 运行空间: 220 KB |
Ac code 2模拟(substr函数)
O
(
n
2
)
O(n^2)
O(n2)
| #include<iostream> |
| #include<cstring> |
| using namespace std; |
| |
| int main() |
| { |
| int n, k; cin >> n >> k; |
| string s; cin >> s; |
| |
| int res = 0; |
| |
| |
| for(int len = 1; len <= n - 1; len ++) |
| if(s.substr(0, len) == s.substr(n - len, len)) |
| res = max(res, len); |
| |
| cout << s; |
| for(int i = 1; i <= k - 1; i ++) cout << s.substr(res); |
| |
| |
| return 0; |
| } |
运行结果
| 结果: Accepted |
| 通过了 15/15个数据 |
| 运行时间: 16 ms |
| 运行空间: 216 KB |
版本号
1.0
1.0
1.0 修改于
2023.2.10
2023.2.10
2023.2.10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本