题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,
恰好是一个回文数。我们称这样的日期是回文日期。
有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。
也有人表示20200202 并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。
【输入格式】
输入包含一个八位整数N,表示日期。
【输出格式】
输出两行,每行1 个八位数。第一行表示下一个回文日期,第二行表示下
一个ABABBABA 型的回文日期。
【样例输入】
20200202
【样例输出】
20211202
21211212
【评测用例规模与约定】
对于所有评测用例,10000101 ≤ N ≤ 89991231,保证N 是一个合法日期的8位数表示。
#include <iostream> #include <string> using namespace std; int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; bool isLeap(int y) {undefined return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; } string pin(int y, int m, int d) {undefined string s, s1; s1 = to_string(y); s += s1; s1 = to_string(m); if (s1.size() == 1) {undefined s1 = "0" + s1; } s += s1; s1 = to_string(d); if (s1.size() == 1) {undefined s1 = "0" + s1; } s += s1; return s; } bool huiwen(int y,int m,int d) {undefined string s = pin(y, m, d); for (int i = 0; i < 4; i++) {undefined if (s[i] != s[7 - i]) return false; } return true; } bool AB(int y, int m, int d) {undefined string s = pin(y, m, d); int A = s[0]; int B = s[1]; if (s[2] == A && s[3] == B && s[4] == B && s[5] == A && s[6] == B && s[7] == A) {undefined return true; } return false; } int main() {undefined int n; cin >> n; int y = n / 10000, m = n % 10000 / 100, d = n % 100; int f1 = 0, f2 = 0; while (true) { d++; if (isLeap(y)) month[2] = 29; else month[2] = 28; if (d > month[m]) {undefined m++; d = 1; } if (m > 12) {undefined y++; m = 1; } if (f1 == 0) {undefined if (huiwen(y, m, d)) {undefined string s = pin(y, m, d); int time = stoi(s); cout << time << endl; f1 = 1; } } if (f2 == 0) {undefined if (AB(y, m, d)) {undefined string s = pin(y, m, d); int time = stoi(s); cout << time << endl; f2 = 1; } } if (f1 && f2) {undefined break; } } return 0; }
问题 C
时间限制: 1Sec 内存限制: 128MB 提交: 68 解决: 20
题目描述
对于一个字符串S,我们定义S 的分值 f(S) 为S中恰好出现一次的字符个数。例如f (”aba”) = 1,f (”abc”) = 3, f (”aaa”) = 0。
现在给定一个字符串S[0…n-1](长度为n),请你计算对于所有S的非空子串S[i…j](0 ≤ i ≤ j < n), f (S[i… j]) 的和是多少。
输入
输入一行包含一个由小写字母组成的字符串S。
输出
输出一个整数表示答案。
样例输入
ababc
样例输出
21
提示
样例说明:
子串f值:
a 1
ab 2
aba 1
abab 0
ababc 1
b 1
ba 2
bab 1
babc 2
a 1
ab 2
abc 3
b 1
bc 2
c 1
对于20% 的评测用例,1 ≤ n ≤ 10;
对于40% 的评测用例,1 ≤ n ≤ 100;
对于50% 的评测用例,1 ≤ n ≤ 1000;
对于60% 的评测用例,1 ≤ n ≤ 10000;
对于所有评测用例,1 ≤ n ≤ 100000。
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 行,从左到右依次为第 1 至第 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 行第 列。
只能向右或者向下走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
输入
输入一行包含两个整数 。
输出
输出一个整数,表示答案。
样例输入
3 4
样例输出
2
提示
给定一个长度为 的序列 。
你可以从中选出两个数 ,然后将 一前一后拼成一个新的整数。
例如 12 和 345 可以拼成 12345 或 34512 。
注意交换 的顺序总是被视为 2 种拼法,即便是 。
给定一整数 ,问有多少种拼法满足拼出的整数是 的倍数。
输入
第一行包含 2 个整数 和 。
第二行包含 个整数 。
输出
一个整数代表答案。
样例输入
4 2
1 2 3 4
样例输出
6
小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。当然这样的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字符串。
输入
一个数字序列。
输出
一个只包含大写字母的字符串,代表答案
样例输入
123242526
样例输出
LCXYZ
提示
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
给定一个长度为 的数组 。你可以从中选出两个数 ,然后将 和 一前一后拼成一个新的整数。例如 12 和 345 可以拼成 12345 或 34512 。注意交换 和 的顺序被视为 2 种拼法,即便是 。
请你计算有多少种拼法满足拼出的整数小于等于 。
输入
第一行包含 2 个整数 和 。 第二行包含 个整数 。
输出
一个整数代表答案。
样例输入
4 33
1 2 3 4
样例输出
8
题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。
输入
输入一行包含一个单词,单词只由小写英文字母组成。
输出
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
样例输入
lanqiao
样例输出
a
2
提示
对于所有的评测用例,输入的单词长度不超过 1000。
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
输入
输入的第一行包含一个整数N(1<N≤100),表示三角形的行数。下面的 N行给出数字三角形。数字三角形上的数都是 0至 100之间的整数。
输出
输出一个整数,表示答案。
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
27
提示
题目描述
对于一个字符串S,我们定义S 的分值 f(S) 为S中恰好出现一次的字符个数。例如f (”aba”) = 2,f (”abc”) = 3, f (”aaa”) = 1。
现在给定一个字符串S[0…n-1](长度为n),请你计算对于所有S的非空子串S[i…j](0 ≤ i ≤ j < n), f (S[i… j]) 的和是多少。
输入
输入一行包含一个由小写字母组成的字符串 S。
输出
输出一个整数表示答案。
样例输入
ababc
样例输出
28
提示
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1
给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1, A2, · · · AN,如下图所示:
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是 1。
输入
第一行包含一个整数 N。 第二行包含N个整数A1,A2,··· AN。
对于所有评测用例,1≤ N ≤100000,−100000≤ Ai ≤100000。
输出
输出一个整数代表答案。
样例输入
7
1 6 5 4 3 2 1
样例输出
2
题目描述
“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0。
每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减 到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。
如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果 优先级小于等于 3,则会被清除出优先缓存。
给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优 先缓存中。
输入
第一行包含 3 个整数 N、M 和 T。
以下 M 行每行包含两个整数 ts 和 id,表示 ts 时刻编号 id 的外卖店收到一个订单。
对于 80% 的评测用例,1 ≤ N, M, T ≤ 10000。 对于所有评测用例,1 ≤ N,M,T ≤ 100000,1 ≤ ts ≤ T,1 ≤ id ≤ N。
输出
输出一个整数代表答案。
样例输入
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
样例输出
1
提示
问题 C
时间限制: 1Sec 内存限制: 128MB 提交: 68 解决: 11
题目描述
给定一个长度为 N 的数组 A = [A1, A2, · · · AN ],数组中有可能有重复出现 的整数。
现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改 A2,A3,··· ,AN。
当修改 Ai 时,小明会检查 Ai 是否在 A1 ∼ Ai−1 中出现过。如果出现过,则 小明会给 Ai 加上 1 ;如果新的 Ai 仍在之前出现过,小明会持续给 Ai 加 1 ,直 到 Ai 没有在 A1 ∼ Ai−1 中出现过。
当 AN 也经过上述修改之后,显然 A 数组中就没有重复的整数了。 现在给定初始的 A 数组,请你计算出最终的 A 数组
输入
第一行包含一个整数 N。 第二行包含N个整数A1,A2,··· ,AN
对于 80% 的评测用例,1 ≤ N ≤ 10000。
对于所有评测用例,1 ≤ N ≤ 100000,1 ≤ Ai ≤ 1000000。
输出
输出N个整数,依次是最终的A1,A2,··· ,AN。
样例输入
5
2 1 1 3 4
样例输出
2 1 3 4 5
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
输入
输入一行包含两个整数 n。
(对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于所有评测用例,1 ≤ n ≤ 10000。)
输出
输出一行,包含一个整数,表示满足条件的数的和
样例输入
40
样例输出
574
题目描述
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项?
输入
输入的第一行包含一个整数 N。 第二行包含N个整数A1,A2,···,AN。(注意A1 ∼AN并不一定是按等差数
列中的顺序给出)
(对于所有评测用例,2≤ N ≤100000,0≤ Ai ≤109。)
输出
输出一个整数表示答案
样例输入
5
2 6 4 10 20
样例输出
10
题目描述
给定 N 个加号、M 个减号以及 N + M + 1 个整数 A1, A2, · · · , AN+M+1,小 明想知道在所有由这 N 个加号、M 个减号以及 N + M + 1 个整数凑出的合法的 后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用1 2 3 + -,则 “2 3 + 1 -” 这个后缀表达式结果是 4,是最大的。
输入
第一行包含两个整数 N 和 M。
第二行包含 N + M + 1 个整数 A1, A2, · · · , AN+M+1。
(对于所有评测用例,0≤ N,M ≤100000,−109 ≤ Ai ≤109。)
输出
输出一个数,表示答案
样例输入
1 1
1 2 3
样例输出
4