Cod sursa(job #2314841)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 9 ianuarie 2019 03:49:42
Problema Patrate 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<iostream>
#include<stack>
#include<string.h>
#define M 30000007
#define N 3000007
using namespace std;
char A[M],B[N];
int f_a[300],f_b[300];
stack <char> s1,s2;
int main()
{
    cin>>A;
    cin>>B;

    int n1=strlen(A);
    int n2=strlen(B);
    int i;
    for(i=0;i<n1;i++)
    {
        f_a[A[i]]++;
    }
    for(i=0;i<n2;i++)
    {
        f_b[B[i]]++;
    }
    for(i=0;i<n1;i++)
    {
        if(f_b[A[i]]-f_a[A[i]]>0)
        {
            cout<<"impossible";
            return 0;
        }
    }

    for(i=0;i<n2;i++)
    {
        f_a[B[i]]--;
    }

    for(i=0;i<n1;i++)
    {
        if(f_b[A[i]]>0)
        {
            f_b[A[i]]--;
            while(s1.top()>A[i]&&f_a[A[s1.top()]]&&s1.size()!=0)
            {
                f_b[s1.top()]++;
                f_a[s1.top()]--;
                s1.pop();
            }
            s1.push(A[i]);
        }
        else
        {
            f_a[A[i]]--;
        }
    }
    while(s1.size()!=0)
    {
        s2.push(s1.top());
        s1.pop();
    }
    while(s2.size()!=0)
    {
        cout<<s2.top();
        s2.pop();
    }
    return 0;
}