Advertisement
Guest User

Untitled

a guest
May 18th, 2012
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <string>
  6. #include <cstring>
  7. #include <sstream>
  8. #include <cmath>
  9. using namespace std;
  10. #define pb push_back
  11. #define f first
  12. #define s second
  13. #define mp make_pair
  14. typedef long long ll;
  15. typedef pair <int, int> pii;
  16. typedef double db;
  17. const int N = 2e5 + 5;
  18. ll f[3][N + 10], ans, n;
  19. string a, b;
  20. int main()
  21. {
  22.   freopen("dictionary.in", "r", stdin);
  23.   freopen("dictionary.out", "w", stdout);
  24.   cin >> n >> a >> b;
  25.   if (a >= b)
  26.   {
  27.     cout << -1;
  28.     return 0;
  29.   }
  30.   int inc = 0;
  31.   while (inc < a.size() && inc < b.size() && a[inc] == b[inc]) inc++;
  32.   a.erase(0, inc);
  33.   b.erase(0, inc);
  34.   f[0][1] = a.size() >= 1;
  35.   f[2][1] = 1;
  36.   if (a.size()) f[1][1] = b[0] - a[0] - 1;
  37.   else f[1][1] = b[0] - 'a';
  38.   for (int i = 1; n > 0 && i < N; i++)
  39.   {
  40.  
  41.     if (i < a.size())
  42.     {
  43.       f[0][i + 1] += f[0][i];
  44.       f[1][i + 1] += f[0][i] * ('z' - a[i]);
  45.     } else f[1][i + 1] += f[0][i] * 26;
  46.  
  47.     f[1][i + 1] += f[1][i] * 26;
  48.  
  49.  
  50.     if (i < b.size())
  51.     {
  52.       f[2][i + 1] += f[2][i];
  53.       f[2][i + 1] += f[2][i] * (b[i] - 'a');
  54.     }
  55.  
  56.     ll sp = f[1][i] + f[2][i] * (i < b.size());
  57.     ans += min(n, sp) * (inc + i);
  58.     n -= sp;
  59.   }
  60.   if (n > 0)
  61.   {
  62.     cout << -1;
  63.     return 0;
  64.   }
  65.   cout << ans;
  66. /*
  67. 2
  68. a
  69. b
  70. 4
  71.  
  72. 2
  73. ab
  74. ba
  75. 3
  76.  
  77. 3
  78. ba
  79. ab
  80. -1
  81.  
  82. 5
  83. abcdabcd
  84. abcdabcz
  85.  
  86.  
  87. 1
  88. aa
  89. aaaa
  90.  
  91. 670
  92. ab
  93. ba
  94. 1984
  95.  
  96. 27
  97. abcd
  98. abcf
  99. 134
  100. */
  101.   return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement