推荐博客链接
总之就是痛心疾
A.中北折磨王
题目描述
众所周知,jp33是中北折磨王,他今天非要拉着rq33和lq33玩他想到的一个小游戏。
首先,jp33给出了两个数字x和y,然后介绍了游戏的规则:
每次都使得rq33的数字a=max(x,y),lq33的数字b=min(x,y),然后jp33会计算一个新数字c=a-b,并将c和b作为x和y继续交给rq33和lq33直到x和y相等,jp33想知道最终相等的值。
因为jp33太折磨了,rq33和lq33不堪重负,于是他们想让你帮帮忙。
输入描述
两个数x,y (1<=x,y<=1e9)
输出描述
输出一个整数,表示最终的值
样例输入
98 63
样例输出
7
思路
不知道各位在做的时候有没有一种感觉, 和熟知的辗转相除法即最大公约数
很像, 实际上的确是, 名字为更相减损法
, 考验细节的时候到了
最大公约数求解还有一点就是gcd(a, b) == gcd(b, a % b)
, 其名为欧几里得算法
代码
#include <iostream>
using namespace std;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int main() {
int x, y;
cin >> x >> y;
cout << gcd(x, y) << endl;
return 0;
}
B.买橘子(未完成)
题目描述
暖男whs喜欢和他的npy一起逛街。一天,他们去兰村赶集,走到了一个水果摊前,想买点橘子吃。水果摊上有n个橘子,编号为1到n,第i个橘子的甜度是ai。whs问老板要了一个袋子后开始挑选橘子,但是他的npy想考验一下他,她给了whs共n次询问,每次给一个编号x,如果编号为x的橘子已经装进袋子了,则应该将它拿出来;否则应该将它装进袋子中。每次询问后,whs应该告诉npy袋子中目前所有橘子的总甜度是多少,他们对总甜度的定义是:满足i<j并且gcd(ai,aj)=1的数对(i,j)的个数。
暖男whs一时间不知道该如何解决这个问题了,可他是从来不会让npy失望的。恰好你逃训练去逛街看到了这一幕,你能不能帮助暖男whs完成她npy的要求呢?
输入描述
第一行输入数字n和q(1≤n,q≤2×105),表示橘子的数量和询问次数。
下一行包含n个由空格分隔的整数,a1,a2,a3……an(1≤ai≤5×105),表示每个橘子的甜度。
接下来q行,每行包含一个整数x(1≤x≤n),表示本次询问给出的橘子编号。
输出描述
对于每次询问,用一行输出对应答案。
样例输入
5 6
1 2 3 4 6
1
2
3
4
5
1
样例输出
0
1
3
5
6
2
思路
代码
C.数论小王子(未完成)
题目描述
sws喜欢研究数论问题,他对数列中计算所有数方差问题十分感兴趣。但他的队友们认为这样过于简单,并将问题升级。pff提出对不同的区间[l,r]内计算所有数的方差,lxy觉得这还不够难,难不住大一的小朋友,他认为数列应该是改变的。数论小王子sws不太聪明,请聪明的你帮助他解决该问题。
输入描述
第一行包含两个正整数 N,M(N,M <=100000 )分别表示数列中实数的个数和操作的个数。
第二行包含 N 个实数,其中第 i 个实数表示数列的第 i 项。
接下来 M 行,每行为一条操作,格式为以下三种之一:
操作 1:1 x y k ,表示将第 x 到第 y 项每项加上 k, k 为一实数。
操作 2:2 x y k ,表示求出第 x 到第 y 项每项乘上 k,k 为一实数。
操作 3:3 x y ,表示求出第 x 到第 y 项这一子数列的方差。
输出描述
输出包含若干行,每行为一个实数,即依次为每一次操作 233 所得的结果(所有结果四舍五入整数 tip:%.0lf)。
样例输入
5 4
1 1 1 1 1
1 2 3 1
3 2 5
2 2 4 3
3 2 5
样例输出
0
5
提示
注意:保证所有操作过程中出现的数不超过1e18。
思路
裸的线段树了, 但是还是有很多实现细节
代码
D.wsp的机器人(新加)
题目描述
输入描述
输出描述
样例输入
7 2
1 2 3 4 5 6 7
1 1
1 2
样例输出
1
3
思路
经典区间和, 利用前缀和
求解即可
注意会卡掉cin
代码
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n, m;
LL f[N];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i ++) scanf("%lld", f + i), f[i] += f[i - 1];
while (m --) {
int l, r;
scanf("%d%d", &l, &r);
printf("%lld\n", f[r] - f[l - 1]);
}
return 0;
}
E.找最短
题目描述
小tao一天偶然从哆啦A梦那里偷走了”复制灯”,小tao一直以来有一个伟大的愿望,就是有吃不完的切糕。我们将初始的切糕用字符串t进行表示。
他用复制灯复制出了超级多的切糕,然后把它们粘在一起。 哆啦A梦发现后,横刀夺爱,只给小tao留下来了其中的一截,留下来的这一截用字符串s进行表示。
意思也就是说 s 是 t+t+…+t(足够长)的子序列,同时初始的切糕t是不确定的。 所以,给你字符串s,请机智的你求出小tao初始切糕t的最短长度。
输入描述
第一行输入一个数字n(1≤n≤1000000),表示s的长度。
接下来一行输入字符串s,保证s仅由小写字母组成
输出描述
输出一行一个整数表示答案
样例输入
14
bacbacbacbacba
样例输出
3
思路
和字符串有关, 那必然是KMP
了, 结论是n - next[n]
代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e6 + 10;
int n;
string str;
int ne[N];
int main() {
cin >> n;
cin >> str;
str = " " + str;
for (int i = 2, j = 0; i <= n; i ++) {
while (j && str[i] != str[j + 1]) j = ne[j];
if (str[i] == str[j + 1]) j ++;
ne[i] = j;
}
cout << n - ne[n] << endl;
return 0;
}
F.我要进ACM
题目描述
一天,whn刚AK了一场比赛,心情十分愉悦,便去兰村赶集,打算买点吃的奖励自己。
谁料刚到水果摊,便见证了whs和他npy的爱情,还帮他们买了橘子。
暖男whn也想收获甜甜的爱情,回到中北后,他便向爱慕已久的女神表白。
女神正在准备ACM实验室的新生赛,无暇估计此事,便叫whn写n遍“我要进ACM”,一方面可以验证他是否真心,另一方面也可以将whn打发走,自己便可以专心学习。
暖男whn可是个编程大佬,他一把抢过女神的电脑,分分钟就写了份代码。
“说吧,想要几遍?”
输入描述
一个数n,表示女神想要几遍
输出描述
输出n行“我要进ACM”(不包含引号)
1≤n≤100
样例输入
3
样例输出
我要进ACM
我要进ACM
我要进ACM
思路
代码
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
while (T --) {
puts("我要进ACM");
}
return 0;
}
G.小智的难题(未完成)
题目描述
今天小智来到教室安排座位,每一列至少有一个座位,至多有k个座位,共有n列,m个座位,两种不同的安排方案(存在某一列在两种方案中安排的座位数不同),但是这仅仅是安排座位的第一步,小智需要为每一列的座位加上一种标签,共有红蓝两种标签,当第i列加红色标签时,红色总权值增加a【i】,当第i列为蓝色标签时,蓝色总权值增加b【i】(每一列全是红色或者全是蓝色),方案是合法的当且仅当,每一列的座位数大于等于1,小于等于k,总座位数等于m,且红色总权值和等于蓝色总权值和,请输出合法方案数量,结果可能很大,请将结果用1e9+7取模,不存在合法方案时输出0。
输入描述
第一行输入n,m,k (1<=n,k<=100,m<=1e5)
第二到n+1行,每行两个整数a【i】,b【i】代表第i列 加红色标签(蓝色标签)所能为红色总权值(蓝色总权值)添加的贡献 (0<=a[i],b[i]<=5)
输出描述
输出一行表示合法方案数对1e9+7取模的结果
样例输入
3 6 3
2 4
4 2
0 0
样例输出
28
思路
代码
H.clq找队友
题目描述
众所周知,jp33、rq33记性不好,总是忘拿东西,作为他们队友的lq33操碎了心,这天rq33和jp33又把东西落在lq33那里了,但是rq33和jp33又都有事,作为rq33和jp33的好队友lq33当然要给他们送过去,送完回来继续学习,于是lq33说了一句“哦我的老天爷”就出发去找rq3和jp33了。
由于中北大学一直在修建工程,所以lq33不一定可以找到jp33和rq33,但如果lq33能找到他们俩任意一个,就会把东西送过去。
lq33想知道怎么才能最快找到rq33和jp33这俩呆逼并赶快回来继续学习,你能帮他算出最短需要走的距离吗?
输入描述
第一行输入n、m、s、e1、e2,分别表示点数、边数、clq初始所在点、zrq所在点、zjp所在点,
第二行到第m+1行,每行输入三个数x、y、z,表示x点与y点由一条长度为z的边相连。
数据范围:1<=n<=100000,1<=m<=1000000,1<=s,e1,e2,x,y<=n,1<=z<=1000000
输出描述
输出一行,clq把东西送给zrq和zjp后又回去的最短距离,如果zrq和zjp都找不到,输出”clq meng le”。
样例输入
5 4 1 3 5
1 2 1
2 3 1
3 4 1
4 5 1
样例输出
8
提示
注意:zrq和zjp可能不在一个地方,clq需要送完再回到初始位置继续学习(因为clq喜欢学习),图中可能存在环和重边,图不一定联通,边为无向边。
思路
最短需要走的距离, 最短路
无疑了, 那么该如何走呢需要走去两个点并且走回原地
+ 从起点走去A点, 然后去B点, 最后回起点
+ 从起点走去A点并且回原点, 然后去B点并且回原点
+ 还有就是只能去到一个点的时候, 这个情况下只需要去到一个点然后返回即可
取上面两种情况的最小值, 注意long long
问题
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef pair<LL, int> PII;
const int N = 1e5 + 10, M = 2e6 + 10;
int n, m, S, F1, F2;
int h[N], e[M], ne[M], idx;
LL w[M];
LL d[N];
bool st[N];
void dijkstra(int u) {
memset(st, false, sizeof st);
for (int i = 1; i <= n; i ++) d[i] = 1e18;
d[u] = 0;
priority_queue<PII, vector<PII>, greater<PII> > q;
q.push({ 0, u });
while (q.size()) {
PII t = q.top();
q.pop();
if (st[t.y]) continue;
st[t.y] = true;
for (int i = h[t.y]; i != -1; i = ne[i]) {
int j = e[i];
if (d[j] > t.x + w[i]) {
d[j] = t.x + w[i];
q.push({ d[j], j });
}
}
}
}
void add(int a, int b, LL c) {
e[idx] = b;
ne[idx] = h[a];
w[idx] = c;
h[a] = idx ++;
}
int main() {
memset(h, -1, sizeof h);
cin >> n >> m >> S >> F1 >> F2;
for (int i = 0; i < m; i ++) {
int a, b;
LL c;
cin >> a >> b >> c;
add(a, b, c);
add(b, a, c);
}
dijkstra(S);
LL a = d[F1], b = d[F2];
dijkstra(F1);
LL c = d[F2];
if (a >= 1e18 && b >= 1e18) puts("clq meng le");
else if (a >= 1e18) cout << b * 2 << endl;
else if (b >= 1e18) cout << a * 2 << endl;
else cout << min((a + b) * 2, a + b + c) << endl;
return 0;
}
I.暖男zsz
题目描述
zsz深夜邀请了n个女同学到家里吃饭,但是zsz突然发现筷子不够了,因为已经凌晨2点了,超市都关门了,zsz只能让这n个女同学围成一圈,使得每2个女同学中间最多有1支筷子。由于夜深了,女同学们都很饿,但是又要在zsz面前保持淑女形象,因此她们只能拿自己相邻的筷子,而且得有两支筷子才能吃饭。zsz很尴尬,他想知道最多能有多少个女同学同时吃上饭,从而继续相处下去。(当然,暖男zsz不吃饭,他在实验室已经吃了很多whs买的橘子了)
输入描述
第一行输入一个n(1≤n≤1000000),代表女同学的人数,第二行是一个01串,字符串长度为n,第i个字符是1的话,代表第i个女同学顺时针方向有筷子,否则没有。
输出描述
最多有多少能同时吃上饭的女同学的人数。
样例输入
5
11011
样例输出
2
思路
一个人想要吃饭就必须拿到两只筷子, 即左右都必须有一只筷子, 即有两个连续的1
那么只需要统计连续的1的数量, 然后除以2就是答案, 因为是环形的, 不如将最开始的1算在最后一个1上面,
代码
#include <iostream>
#include <vector>
using namespace std;
int n;
string str;
vector<int> a;
int main() {
cin >> n;
cin >> str;
int i = 0;
while (i < n && str[i] == '1') i ++;
for (int j = i; j < n; j ++)
if (str[j] == '0') a.push_back(0);
else a.back() ++;
a.back() += i;
int ans = 0;
for (int i = 0; i < a.size(); i ++)
ans += a[i] / 2;
cout << ans << endl;
return 0;
}
G.谁说我不聪明
题目描述
上周肥肥姐得到了两袋神奇的话梅,每袋里的话梅数量任意,可以不同。逍遥哥看着眼红就要去抢,并把魔爪伸向其实也不那么正义的徐书记,徐书记迫于逍遥哥的威胁,提出玩游戏决定话梅的归属。游戏规定,两人轮流从袋子里取话梅,每次有两种不同的取法,一是可以在任意一袋中取走任意数目的话梅;二是可在两袋中同时取走相同数量的话梅。最后把话梅取完的为胜。现给出初始的两袋中话梅的数目,秉承着 “L-F” 原则,逍遥哥先取,虽然他俩都不那么聪明,但假设假设假设他们都能采取最好的策略,问最后胜利的是逍遥哥还是肥肥姐。
输入描述
输入包含若干行,表示若干话梅的初始情况,每行包括两个非负整数,两数都在 int 范围内。
输出描述
输出也有对应的若干行,若逍遥哥阳谋得逞,输出 “xy”,若肥肥姐能守住她的梅,输出 “ff”。
样例输入
2 1
8 4
4 7
样例输出
ff
xy
ff
思路
威佐夫博弈
代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int x, y;
double t = (1 + sqrt(5)) / 2;
while (cin >> x >> y) {
if (x < y) swap(x, y);
if ((int)((x - y) * t) == y) puts("ff");
else puts("xy");
}
return 0;
}
K.别走泥坑
题目描述
暑期集训的一天下了大雨,地面出现了许多泥坑,一踩一脚泥。小tao从坐标平面上的点(0,0)出发,准备去向文瀛餐厅(X , Y)(-500≤ X , Y≤ 500)。在路上有N(1≤ N≤ 10000)个泥坑,位于点(Ai,Bi)(-500≤ Ai , Bi≤500)。
小tao为了好好集训,买了一双新鞋子来鼓舞自己,他不想弄脏鞋子,但他也想尽快到达餐厅干饭。如果小tao只能平行于轴线移动,并在整数坐标点转向,请问他到达餐厅且保持鞋子干净要走的最小距离是多少?
保证总是有一条没有泥的路使得小tao可以走到餐厅。
输入描述
第1行:三个空间分隔的整数:X、Y和N。 表示餐厅坐标以及泥坑的数量。
第2..N+1行:第i+1行包含两个空格分隔的整数:Ai和Bi。 表示每个泥坑的坐标。
输出描述
输出小tao在不踩泥的情况下到达文瀛餐厅所需的最小距离。
样例输入
1 2 7
0 2
4 2
3 1
1 1
2 2
-1 1
-1 3
样例输出
11
思路
正常走迷宫即可, 主要是注意下标的hash
代码
#include <iostream>
#include <algorithm>
#include <queue>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1e3 + 10;
int X, Y, n;
bool g[N][N];
int d[N][N];
int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
void bfs() {
queue<PII> q;
q.push({ 0 + 500, 0 + 500 });
g[0 + 500][0 + 500] = true;
while (q.size()) {
PII t = q.front();
q.pop();
if (t.x == X && t.y == Y) break;
for (int i = 0; i < 4; i ++) {
int tx = t.x + dx[i], ty = t.y + dy[i];
if (tx < 0 || tx > 1000 || ty < 0 || ty > 1000) continue;
if (g[tx][ty]) continue;
g[tx][ty] = true;
d[tx][ty] = d[t.x][t.y] + 1;
q.push({ tx, ty });
}
}
}
int main() {
cin >> X >> Y >> n;
for (int i = 0; i < n; i ++) {
int a, b;
cin >> a >> b;
g[a + 500][b + 500] = true;
}
bfs();
cout << d[X + 500][Y + 500] << endl;
return 0;
}
L.最终圣战
题目描述
zjh一觉醒来发现自己被困在了一个不为人知的地方,身边只有一幅地图,上面画着自己所在的位置,以及目的位置,落款竟然是zwt这个大魔王!!!为了找到zwt决战,并且不耽误时间,zjh想请你找到一个可以到达决战地点(x, y)最短的路径,请你帮帮他
地图如上所示,你的位置下面是大海,圆圈内是岩浆,圆圈的边缘是陆地,目的地的圆内一定是陆地,你的任务是找到到达(x, y)的最短距离
注意y可能会小于ry,且保证一定有解,并且两个圆不相交
输入描述
一共有T组,每组的数据依次为rx,ry,rr,x,y,r
数据范围(−10^2≤rx,ry,x,y≤10^2 , 0<r,rr≤10^2)
其中rx,ry为岩浆圈的坐标,rr为岩浆圈的半径,x,y为目的地的坐标,r为目的地的半径
输出描述
每行输出一个最短距离,保留4位小数
样例输入
2
1 1 1 3 2 1
1 1 1 1 3 1
样例输出
2.9850
3.8264
思路
这道题是个数学题,具备三角函数知识与基本编程知识的就可以解掉,首先有三种情况
-
fabs(x-rx) <= rr
∠A的角度我们是可以求出来的,根据1/2absinC这个公式可以求出∠A的大小,然后再求小段圆弧所对应的角度,这个角度可以用大角减去上面角的角度得到,上面角已知两边并且是个直角三角形,根据公式得到小角的角度,对应的圆弧长就是小角+90度,总长度就是直线+这段圆弧的长度
请添加图片描述 -
fabs(x-rx) > rr && ry <= y
这种情况就是1/4段圆弧长 + 直线距离 -
fabs(x-rx) > rr && ry > y
有些人看到这里会疑惑,但是题目中说明一定有解,那么这个圆上的点一定可以走,而坐标,半径已知,我们不难求出总长度
代码
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define PI 3.1415926535
double len(double a, double b, double c, double d)
{
return sqrt((a - c) * (a - c) + (b - d) * (b - d));
}
double hu(double r, double jd)
{
return 2 * PI * r * (jd / 360.0);
}
int main()
{
// freopen("D:\\1.in", "r", stdin);
// freopen("D:\\9.out", "w", stdout);
int t;
cin >> t;
while (t--)
{
double rx, ry, r, x, y, jd, rr;
double ans = 0;
cin >> rx >> ry >> rr >> x >> y >> r;
if (fabs(rx - x) <= r)
{
/*
以下是根据S = 1/2absinC,以及反三角函数求角度,最后求弧长
*/
double S = rr * fabs(y - ry) / 2;
double sinC = S * 2 / (len(rx, ry, x, y) * rr);
double jd = asin(sinC) * 180.0 / PI + 90.0;
double jd1 = acos(r / len(rx, ry, x, y)) * 180.0 / PI;
ans = hu(rr, jd - jd1) + sqrt(len(rx, ry, x, y) * len(rx, ry, x, y) - r * r);
}
else
{
ans += hu(rr, 90.0);
// cout << ans << endl;
if (y >= ry)
{
if (x < rx)
ans += len(rx - rr, ry, x, y);
else
ans += len(rx + rr, ry, x, y);
}
else
{
ans += fabs(x - rx) - fabs(rr) - sqrt(r * r - (y - ry) * (y - ry)) + r;
}
}
printf("%.4lf\n", ans);
}
return 0;
}
M.简单的滑动解锁
题目描述
最近一段时间,ACM的小伙伴们发现Ljs总是偷偷摸摸地在QQ上和某个猫猫头像的账号聊天,一旦周围有人靠近,他就会光速切换窗口。有人询问时,他总是躲躲闪闪,三缄其口,甚至连他的队友Zjh和Zwt都不知道猫猫头像是谁。这种奇怪的现象引起了大家的怀疑,难道是在和npy聊天吗?!众所周知,作为ACM单身狗联盟的坚定成员Ljs,难道他偷偷背叛了组织!?为了找出事情的真相,ACM的小伙伴们开始了行动。
这天中午,Ljs去餐厅吃午饭,却把笔记本电脑放在了实验室,这简直是一个非常绝妙的机会。大家围在他的电脑旁,却发现狡猾的Ljs在走之前顺手按下了锁屏键。不过好在他的锁屏密码只是简单的滑动解锁,然而这个滑动解锁有一点点额外的规则如下:
1.可以移动的部分只有“钥匙方块”,其他部分都不能移动。
2.钥匙与锁孔都可以认为是在NN大小的区域内由许多11大小的单位正方形拼接成的多边形。当然,这些单位方块拼出的多边形并不一定完全相连,但它们之间的相对位置不会改变。
3.钥匙在左侧区域内可以沿转轴转动,之后沿着滑轨滑向锁孔,如果钥匙可以顺利滑向锁孔,并和锁孔可以完全重合,则可以打开锁屏。
4.如果当前钥匙不可以打开当前的锁,则可以按下刷新键刷新出新的钥匙。如果使用了错误的钥匙,则电脑会进入锁定状态,需要输入长达256位的密码才能解锁。
钥匙与锁孔的示意图如下
@@%)NLYP1V3%YT~U02$BM6U.png
为了能一探Ljs的秘密,Ljs的队友找到了你,希望你能完成一个程序判断当前的钥匙方块是否能打开当前的锁方块,这次行动能否成功就靠你了!
输入描述
第一行一个正整数N。
代表钥匙与锁孔的大小。
之后跟随两个NN的01矩阵,钥匙矩阵在前,锁孔矩阵在后。矩阵中1代表该位置有11大小的小正方形,0代表该位置为空。
矩阵中每个元素用空格分离。
例如:
矩阵
0 1
1 1
代表形状为
image.png
输出描述
一行字符串
如果可以使用该钥匙开锁,则输出“YES”,否则输出 “NO”。
样例输入
2
0 1
1 1
0 1
0 0
样例输出
YES
思路
首先是肯定要枚举钥匙的四种旋转情况, 然后怎么判断是否重合呢?
题目中体现出来一个滑动的概念, 那么对于钥匙的i行j列, 直到锁孔的i行j列都不能有阻拦
特别主要TLE, 我们只需要枚举每一行最右边一个1即可
代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1010;
int n;
int a[N][N], b[N][N], c[N][N];
bool check() {
for (int i = 0; i < n; i ++)
for (int j = n - 1; j >= 0; j --)
if (a[i][j] == 1) {
for (int k = 0; k <= j; k ++)
if (b[i][k] == 1)
return false;
break;
}
return true;
}
void swap() {
int l = 0, r = n - 1;
for (int i = 0 ; i < n; i ++)
for (int j = 0; j < n; j ++) {
c[l][r] = a[i][j];
l ++;
if (l >= n) l = 0, r --;
}
memcpy(a, c, sizeof a);
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i ++)
for (int j = 0; j < n; j ++)
scanf("%d", &a[i][j]);
for (int i = 0; i < n; i ++)
for (int j = 0; j < n; j ++)
scanf("%d", &b[i][j]);
for (int i = 0; i < 4; i ++) {
if (check()) {
puts("YES");
return 0;
}
swap();
}
puts("NO");
return 0;
}
N.翻译官
题目描述
wsp发明了一个机器人,整天拉着zc一起测试。zc想去玩耍,于是就去求助zzdl。zc想到了一个十分完美的办法,他让zzdl套着机器人的外壳,让zzdl代替机器人完成测试。
每次测试wsp会给出一个仅由字母组成的字符串s,zzdl需要把所有字母转化为小写,再输出。
但是wsp询问的太快了,zzdl有点跟不上,你能帮帮他吗?
输入描述
一个数字n,表示字符串s的长度(1<=n<=100)
第二行是一行字母,表示字符串s
输出描述
转换后的字符串
样例输入
6
abCaDb
样例输出
abcadb
思路
遍历字符串, 将大写字符转化为小写即可, A的ASCII码比a小32
代码
#include <iostream>
using namespace std;
int n;
string str;
int main() {
cin >> n;
cin >> str;
for (int i = 0; i < n; i ++)
if (str[i] < 'a')
str[i] += 32;
cout << str << endl;
return 0;
}
总结
题目总体难度不大, 思维量很小, 但是要求有一定的代码实现能力