第1题 糖果
信息学课堂上,老师准备了一些糖,对于每次的提问,凡是举手要回答问题的同学都有可能拿到一颗糖,但同一个学生拿糖的时间至少要隔C秒(含C秒,第1次举手肯定能拿到糖)。已知这次课信息学老师共提问了N次,每次提问的时间为上课后的第T秒,小慧为了拿到很多糖,每次都举手了。问小慧最后拿到了多少颗糖。
输入格式
第一行两个整数,分别是N,C。
第二行N个整数,按顺序给出每次提问的时间Ti。
输出格式
一个整数,表示小慧能拿到的糖果数。
输入/输出例子1
输入:
6 5
1 3 7 8 10 12
输出:
3
样例解释
样例解释:
拿到糖的时间为:1、7、12
数据范围:
对于100%的数据,0<N,C<=3000,0<=Ti<=100000。
第2题 德育分
期末到了,小慧协助班主任统计同学们本学期的德育分情况,已知学号为1~n的n个同学的德育分,小慧有一次使用特权的机会,她可以把任意连续一段学号同学的德育分同时乘以C,问小慧使用特权后,全部同学的德育分总和最多为多少分?
输入格式
第一行,两个整数n和c;
第二行,n个整数,按学号顺序给出n个同学的德育分ai。
输出格式
输出一个整数,表示小慧能得到的最大德育分之和。
输入/输出例子1
输入:
9 3
-2 1 -3 4 -1 2 1 -5 4
输出:
13
样例解释
样例解释:
小慧把4~7号同学的分数同时乘以3,变为-2 1 -3 12 -3 6 3 -5 4,得到最大德育分数之和为13。
数据范围:
对于30%的数据,1<=n<=100,1<=c<=10,-100<=ai<=100;
对于80%的数据,1<=n<=10000,1<=c<=100,-1000<=ai<=1000;
对于100%的数据,1<=n<=100000,1<=c<=1000,-10000<=ai<=10000。
第2题 德育分
具体做法参见:这篇文章
期末到了,小慧协助班主任统计同学们本学期的德育分情况,已知学号为1~n的n个同学的德育分,小慧有一次使用特权的机会,她可以把任意连续一段学号同学的德育分同时乘以C,问小慧使用特权后,全部同学的德育分总和最多为多少分?
输入格式
第一行,两个整数n和c;
第二行,n个整数,按学号顺序给出n个同学的德育分ai。
输出格式
输出一个整数,表示小慧能得到的最大德育分之和。
输入/输出例子1
输入:
9 3
-2 1 -3 4 -1 2 1 -5 4
输出:
13
样例解释
样例解释:
小慧把4~7号同学的分数同时乘以3,变为-2 1 -3 12 -3 6 3 -5 4,得到最大德育分数之和为13。
数据范围:
对于30%的数据,1<=n<=100,1<=c<=10,-100<=ai<=100;
对于80%的数据,1<=n<=10000,1<=c<=100,-1000<=ai<=1000;
对于100%的数据,1<=n<=100000,1<=c<=1000,-10000<=ai<=10000。
第3题 圆环
具体做法参见:这篇文章
小慧拿着一个圆环玩耍,该圆环平均分成N格(编号为1…N),其中第i格与第i+1格相邻,第1格与第N格相邻。开始小慧左手握在位置1,右手握在位置2。对于每一步,小慧可以进行如下的操作:左手移动一格的位置或右手移动一格的位置(但是两手不能同时在同一格),如下图。

现在给出小慧Q次操作的目标位置,每次操作为:一个字母L或R、空格、目标位置数字,表示当前操作小慧的左手或右手到达的位置(每一次操作只能移动一只手),问她至少移动了多少步。

输入格式
第一行,2个正整数N,Q;
接下来Q行,每行第一个为字母L(左手)或R(右手),接着是一个正整数V(字母与数字用空格分开),表示左手或右手到达位置V;
输出格式
输出一个整数,表示Q次操作后小慧双手共移动了多少步。
输入/输出例子1
输入:
6 3
R 4
L 5
R 6
输出:
8
样例解释
样例解释:
右手从2到4,需移动2步,此时左手不动;
左手从1到5,需移动2步,此时右手不动;
右手从4到6,需移动4步,此时左手不动;
所以共移动了2+2+4=8步。
数据范围:
对于100%数据,3<=N<=100,1<=Q,V<=100。
第4题 字符串
具体做法参见:这篇文章
此处另外给出2种写法
#include <iostream>
#include <map>
using namespace std;
int main() {
int n;
for (cin >> n; n; --n) {
string st;
cin >> st;
map<int, int> a;
for (const char &c : st) {
++a[c - 97];
}
int maxn = 0;
for (const auto &[x, y] : a) {
maxn = max(maxn, y);
}
int len = st.size();
if (maxn * 2 <= len) {
cout << (len & 1) << endl;
}
else {
cout << 2 * maxn - len << endl;
}
}
return 0;
}
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
int a[100];
bool cmp(int x, int y) {
return x > y;
}
int main() {
int n;
for (cin >> n; n; --n) {
string st;
cin >> st;
memset(a, 0, sizeof(a));
size_t len = st.size();
for (size_t i = 0; i < len; i++) {
a[st[i] - 97]++;
}
sort(a, a + 26, cmp);
while (a[1] != 0) {
a[0] = a[0] - a[1];
a[1] = 0;
sort(a, a + 26, cmp);
}
cout << a[0] << endl;
}
return 0;
}
样例解释
小慧看到一段由n个小写字母组成的字符串S,她想让这个字符串变得尽可能短。她能进行的操作是:可以多次删除S中任意一对相邻且不同的字符。例如:如果S=“racoon”,那么通过删除一对字符,他可以得到字符串“coon”、“roon”、“raon”、“raco”,但无法得到“racn”(因为被删除的字母是相同的),也没法得到“rcon”(因为被删除的字母不是相邻的)。
问:通过进行任意次这种删除操作,小慧能得到的字符串S的最小长度是多少?
输入格式
第一行一个整数G,表示有G组测试数据;
接下来G行,每行一个字符串S;
输出格式
输出G行,每行一个整数,表示对应字符串S能得到的最小长度。
输入/输出例子1
输入:
5
aabc
abaca
avbvvcvvvd
abcdefg
dabbb
输出:
0
1
2
1
1
数据范围:
对于40%的数据,字符串S的长度<=10;
对于100%的数据,字符串S的长度<=10000,G<=5。
第5题 朋友
具体做法参见:这篇文章
小慧有很多朋友,为了方便,她把朋友标记为编号1至N。星期天,小慧准备去拜访一些朋友,已知她的第i个朋友在Ci时刻前(不含Ci)的时间是有空的,而小慧在S时刻起床,计划在S+Ti时刻拜访朋友i(有可能在同一时刻拜访多个朋友,且小慧只有在朋友有空的情况才能访友成功)。
现给出Q次询问,每次给出小慧希望周日至少能访友的数量V和她的起床时刻S。对于每次询问,如果小慧的希望能达成,则输出“YES”,否则,输出“NO”。
输入格式
第一行,整数N,Q;
第二行,N个整数,表示每个朋友被拜访的时限Ci;
第三行,N个整数,表示小慧计划拜访每个朋友的时刻Ti;
接下来Q行,每行2个整数V和S。
输出格式
输出Q行,每行一个“YES”或“NO”
输入/输出例子1
输入:
5 5
3 5 7 9 12
4 2 3 3 8
1 5
1 6
3 3
4 2
5 1
输出:
YES
NO
YES
YES
NO
样例解释
样例解释:
对于第一个询问,小慧在5时刻起床,则计划拜访每个朋友的时刻是[9,7,8,8,13],而她的朋友分别只能在[3,5,7,9,12]前拜访,因为9>3,7>5,8>7,8<9,13>12,所以她只能成功拜访第4个朋友。
对于第二个询问,小慧在6时刻起床,1个朋友都拜访不了。
对于第三个询问,小慧能拜访朋友3、4、5。
对于第四、五个询问,小慧能拜访朋友2、3、4、5。
数据范围:
对于40%的数据,1<=N,Q<=1000;
对于100%的数据,1<=N,Q<=100000,1<=Ci,Ti,S,V<=1000000。
第6题 数列
小慧最近学习了质数和合数,她对一个有n个数的数列a按下述方法生成了数列b:
1.把数列a的每个数全部放到数列b中;
2.对于数列a的每一个数ai,如果ai是质数,则把正整数中的第ai个质数放到数列b中,如果ai是合数,则把ai的最大因子(除了ai本身)放到数列b中;
3.把数列b中的2*n个数打乱顺序。
现在小慧给出了数列b的2*n个整数bi,问原来的数列a是哪些数?
输入格式
第一行,一个整数n,表示原数列a共有n个正整数。
第二行,2*n个整数,表示按规则生成的数列b。
输出格式
按从小到大的顺序输出原数列a的n个整数。
输入/输出例子1
输入:
3
3 5 2 3 2 4
输出:
2 3 4
样例解释
样例解释:
2是质数,第2个质数是3,3是质数,第3个质数是5,4是合数,其非本身的最大因子是2,因此原数列2 3 4按规则变成数列2 3 4 3 5 2,符合输入的b数组。
数据范围:
对于50%的数据,1<=n<=1000,2<=ai<=1000,2<=bi<=7919(即第1000个质数)。
对于100%的数据,1<=n<=100000,2<=ai<=100000,2<=bi<=1299709(即第100000个质数)。
503

被折叠的 条评论
为什么被折叠?



