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]);
}

 

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务