Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int inf = 1e9;
- const int maxAZ = 26;
- const int maxN = 3e5;
- vector <int> AZ[maxAZ + 10];
- int szAZ[maxAZ + 10], curAZ[maxAZ + 10];
- int mark[maxN + 10];
- int to_int(char a){
- return a - 'a' + 1;
- }
- int Sum(int pst, int n, int sum = 0){
- for(int i=pst;i>=1;i-=i&-i)
- sum += mark[i];
- return sum;
- }
- void Update(int pst, int n){
- for(int i=pst;i<=n;i+=i&-i)
- mark[i] ++;
- }
- int main(){
- int k;
- scanf("%d", &k);
- string prt;
- cin >> prt;
- int len_prt = prt.size();
- for(int i=0;i<len_prt;i++){
- char p = prt[i];
- AZ[to_int(p)].push_back(i + 1);
- szAZ[to_int(p)] ++;
- }
- string str;
- cin >> str;
- int len_str = str.size();
- long long ans = 0;
- for(auto s: str){
- int ints = to_int(s);
- if(curAZ[to_int(s)] == szAZ[to_int(s)]){
- printf("-1");
- return 0;
- }
- int pst = AZ[ints][curAZ[ints]];
- curAZ[ints] ++;
- ans += pst;
- if(k == 1){
- ans -= (long long) Sum(pst, len_prt);
- Update(pst, len_prt);
- }
- }
- printf("%lld", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement