Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <cstring>
- #include <sstream>
- #include <cmath>
- using namespace std;
- #define pb push_back
- #define f first
- #define s second
- #define mp make_pair
- typedef long long ll;
- typedef pair <int, int> pii;
- typedef double db;
- const int N = 2e5 + 5;
- ll f[3][N + 10], ans, n;
- string a, b;
- int main()
- {
- freopen("dictionary.in", "r", stdin);
- freopen("dictionary.out", "w", stdout);
- cin >> n >> a >> b;
- if (a >= b)
- {
- cout << -1;
- return 0;
- }
- int inc = 0;
- while (inc < a.size() && inc < b.size() && a[inc] == b[inc]) inc++;
- a.erase(0, inc);
- b.erase(0, inc);
- f[0][1] = a.size() >= 1;
- f[2][1] = 1;
- if (a.size()) f[1][1] = b[0] - a[0] - 1;
- else f[1][1] = b[0] - 'a';
- for (int i = 1; n > 0 && i < N; i++)
- {
- if (i < a.size())
- {
- f[0][i + 1] += f[0][i];
- f[1][i + 1] += f[0][i] * ('z' - a[i]);
- } else f[1][i + 1] += f[0][i] * 26;
- f[1][i + 1] += f[1][i] * 26;
- if (i < b.size())
- {
- f[2][i + 1] += f[2][i];
- f[2][i + 1] += f[2][i] * (b[i] - 'a');
- }
- ll sp = f[1][i] + f[2][i] * (i < b.size());
- ans += min(n, sp) * (inc + i);
- n -= sp;
- }
- if (n > 0)
- {
- cout << -1;
- return 0;
- }
- cout << ans;
- /*
- 2
- a
- b
- 4
- 2
- ab
- ba
- 3
- 3
- ba
- ab
- -1
- 5
- abcdabcd
- abcdabcz
- 1
- aa
- aaaa
- 670
- ab
- ba
- 1984
- 27
- abcd
- abcf
- 134
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement