Codeforces Round #550 (Div. 3) E. Median String

题意:给你两个字符串,保证他们两个之间有奇数个字典序大于第一个,小于第二个字符串的串,求这两个字符串的最中间的字符串。

1、考虑先求出两个字符串的差值,然后将差值/2,然后加上第一个字符串。

2、中间会出现负数,然后从后往前扫一遍,发现负数向前拿一位消掉负数。

3、会爆char类型,提前吧字符串转化为int类型的数字。

4、答案 = 差值/2+第一个串。

Code:

#include <bits/stdc++.h>
using namespace std;
int s1[200005], s2[200005];
int cha[200005];
char ch;
int main()
{
	int n;
	scanf("%d\n", &n);
	for (int i = 0; i < n; i++)
	{
		ch = getchar();
		s1[i] = ch - 'a';
	}
	getchar();
	for (int i = 0; i < n; i++)
	{
		ch = getchar();
		s2[i] = ch - 'a';
	}
	for (int i = 0; i < n; i++)
		cha[i] = s2[i] - s1[i];
	for (int i = n - 1; i > 0; i--)
	{
		if (cha[i] < 0)
		{
			cha[i] += 26;
			cha[i - 1]--;
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (cha[i] & 1)
			cha[i + 1] += 26;
		cha[i] /= 2;
		s1[i] += cha[i];
	}
	for (int i = n - 1; i >= 0; i--)
	{
		if (s1[i] >= 26)
		{
			s1[i - 1] += s1[i] / 26;
			s1[i] = s1[i] % 26;
		}
	}
	for (int i = 0; i < n; i++)
		printf("%c", 'a' + s1[i]);
}

 

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务