Cod sursa(job #3334333)

Utilizator IleaIlea Bogdan Ilea Data 17 ianuarie 2026 11:02:16
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

#define NMAX 50001

int n,aib[NMAX];
void update(int ind,int val){
    for(;ind<=n;ind+=(ind&-ind)){
        aib[ind]+=val;
    }
}
int query(int ind){
    int sum=0;
    for(;ind>0;ind-=(ind&-ind)){
        sum+=aib[ind];
    }
    return sum;
}
vector<int>p[27];
int main(void){
    freopen("swap.in","r",stdin);
    freopen("swap.out","w",stdout);
    string a,b;
    cin>>a>>b;
    {int ind=1;
    for(auto it:a){
        p[it-'a'].push_back(ind);
        ++ind;
    }
    for(int i=0;i<=26;++i){
        reverse(p[i].begin(),p[i].end());
    }}
    int sum=0;
    b=" "+b;
    n=a.size();
    try{
        for(int i=1;i<=n;++i){
            if(!p[b[i]-'a'].size())throw("get a job");
            int v=p[b[i]-'a'].back();
            p[b[i]-'a'].pop_back();
            sum+=v-1-query(v);
            cerr<<v<<endl;
            update(v,1);
        }
        cout<<sum;
    }catch(char const*err){
        cout<<-1;
    }
    return 0;
}