Pagini recente » Cod sursa (job #3338562) | Cod sursa (job #3312476) | Cod sursa (job #430418) | Cod sursa (job #3356276) | Cod sursa (job #3334333)
#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;
}