Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e5 + 5e2;
- string f ,m;
- int F ,M;
- string Read(){
- static char Buff[N];
- scanf("\n%s" ,Buff);
- return Buff;
- }
- string GetMax(string &s ,int n) {
- char mx = s[0];
- for(int i = 1 ; i < n ; i++)
- mx = max(mx ,s[i]);
- vector< int > idx;
- for(int i = 0 ; i < n ; i++)
- if( s[i] == mx ) idx.push_back(i);
- char lastResChar = (char)0;
- vector< bool > vis(n ,false);
- int Size = 0 ,resIdx = idx[0];
- for(int i = idx[0] ; i < n ; i++){
- if( i == n - 1 || s[i] != mx ){
- lastResChar = s[i];
- vis[i] = true;
- Size += 1;
- break;
- } else {
- vis[i] = true;
- Size += 1;
- }
- }
- for(auto id : idx) if( !vis[id] ) {
- int Sz = 0;
- char lastTmpChar = (char)0;
- for(int i = id ; i < n ; i++){
- if( i == n - 1 || s[i] != mx ){
- lastTmpChar = s[i];
- vis[i] = true;
- Sz += 1;
- break;
- } else {
- vis[i] = true;
- Sz += 1;
- }
- }
- if( ( Sz > Size ) || ( Sz == Size && lastResChar < lastTmpChar ) ){
- resIdx = id;
- Size = Sz;
- }
- }
- string Res;
- for(int i = resIdx ; i < n ; i++)
- Res += s[i];
- return Res;
- }
- int main() {
- f = Read(); F = f.size();
- m = Read(); M = m.size();
- string mxF = GetMax(f ,F);
- string mxM = GetMax(m ,M);
- F = mxF.size();
- string BabyName(1 ,mxF[0]);
- for(int i = 1 ; i < F ; i++){
- if( mxF[i] >= mxM[0] ) {
- BabyName += mxF[i];
- } else break;
- }
- BabyName += mxM;
- for(char c : BabyName) printf("%c" ,c);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement