Codeforces Round #550 (Div. 3)E. Median String
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #550 (Div. 3)E. Median String
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
把字符串看作是26進制的數,從后往前翻譯,那么就可以把兩個串變成對應的26進制的數字,那么只要把兩個數加起來除以二就得到中間的串對應的數了,同理再轉化回來就行了。
但是這樣會有一個問題就是串的長度有2e5,26的2e5次方顯然不可求,所以需要對每一位進行手動的加和運算。
對于兩個串,我們假設a串從后往前的每一位對應的數值為a0, a1, a2...,b串從后往前的每一位對應的數值為b0, b1, b2...對于進制加法,有
?
扔一下垃圾代碼:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define ll long long
#define lowbit(x) (x&(-x))
#define PI acos(-1)
#define ms(x,y) memset(x, y, sizeof(x))
using namespace std;const int maxn = 2e5+7;
char a[maxn], b[maxn];int ans[maxn];int main()
{int n;scanf("%d", &n);scanf("%s%s", a, b);for(int i=n-1;i>=0;i--){int ta = a[i] - 'a';int tb = b[i] - 'a';ans[i] = ta + tb;if(ans[i]&1){ans[i+1] += 13;ans[i] = (ans[i] - 1) / 2;ans[i] += ans[i+1] / 26;ans[i+1] %= 26;}else ans[i] = ans[i] / 2;}for(int i=0;i<n;i++) printf("%c", 'a' + ans[i]); puts("");
}
轉載于:https://www.cnblogs.com/HazelNut/p/10634221.html
總結
以上是生活随笔為你收集整理的Codeforces Round #550 (Div. 3)E. Median String的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求《我们不能是朋友》百度云资源速求!!!
- 下一篇: 多线程共享全局变量以及锁机制