Advertisement
iliayar

Untitled

Dec 10th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <vector>
  5. #include <string>
  6. #include <map>
  7. #include <cstdio>
  8. #include <set>
  9. #include <queue>
  10. #include <functional>
  11. #include <bitset>
  12. #include <climits>
  13. #include <cctype>
  14. #include <cassert>
  15. #include <deque>
  16. #include <time.h>
  17.  
  18. using namespace std;
  19.  
  20.  
  21. typedef long long int64;
  22.  
  23. #define ret0 goto end
  24. #define DBG;
  25. #ifndef LOCAL_BUILD
  26. #define DBG if(false)
  27. #define ret0 return 0
  28. #endif
  29.  
  30.  
  31. #define st first
  32. #define nd second
  33.  
  34. #define double long double
  35. #define mp make_pair
  36. #define int int64
  37. #define pb push_back
  38. #define vint vector<int>
  39. #define pii pair<int,int>
  40.  
  41.  
  42. #define ALL(a) a.begin(),a.end()
  43.  
  44. #define FILE_NAME "king2"
  45.  
  46. ostream& operator<<(ostream& os, const vector<int>& a) {
  47.     for(int i = 0; i < a.size(); ++i) {
  48.         os << a[i] << ' ';
  49.     }
  50.     return os;
  51. }
  52. /*-------------------------------------------------------------------------*/
  53.  
  54. bool comp(pii a1, pii a2) {
  55.     return a1.st < a2.st;
  56. }
  57. /*-------------------------------------------------------------------------*/
  58. signed main() {
  59.     ios_base::sync_with_stdio(0);
  60.     cin.tie(0); cout.tie(0);
  61. #ifdef LOCAL_BUILD
  62.     freopen("input.txt","r",stdin);
  63.     freopen("output.txt", "w", stdout);
  64.     clock_t tStart = clock();
  65. #else
  66.     //freopen(FILE_NAME".in","r",stdin);
  67.     //freopen(FILE_NAME".out", "w", stdout);
  68. #endif
  69. /*-------------------------------------------------------------------------*/
  70.  
  71.     string s = "";
  72.     cin >> s;
  73.     vint a;
  74.     vint sum;
  75.     int c = 0;
  76.     for(int i = 0; i < s.length(); ++i) {
  77.         if (s[i] == 'a')
  78.             c++;
  79.         else if (s[i] == 'b'){
  80.             if(c!=0) {
  81.                 a.pb(c);
  82.                 sum.pb(c);
  83.                 if(sum.size() !=  1)
  84.                     sum[sum.size() - 1] += sum[sum.size() - 2];
  85.                 c = 0;
  86.             }
  87.         }
  88.     }
  89.     if(c != 0) {
  90.         a.pb(c);
  91.         sum.pb(c);
  92.         if(sum.size() !=  1)
  93.             sum[sum.size() - 1] += sum[sum.size() - 2];
  94.     }
  95.     int mod = 1e+9 + 7;
  96.  
  97.     if(a.size() == 0) {
  98.         cout << 0 << endl;
  99.         return 0;
  100.     }
  101.     if(s.size() == 1) {
  102.         cout << a[0]%mod << endl;
  103.         return 0;
  104.     }
  105.     if(a.size() == 2) {
  106.         cout << sum[1]%mod + a[0]*a[1]%mod << endl;
  107.         return 0;
  108.     }
  109.     int res = a[a.size()-1]%mod;
  110.     for(int i = a.size()-2; i >= 0; --i) {
  111.         res = res*a[i];
  112.         res %= mod;
  113.         if(i-1 >= 0) {
  114.             res += sum[sum.size() - 1] - sum[i-1];
  115.         } else {
  116.             res += sum[sum.size() - 1];
  117.         }
  118.         res %= mod;
  119.     }
  120.     cout << res << endl;
  121. /*-------------------------------------------------------------------------*/end:
  122. #ifdef LOCAL_BUILD
  123.     printf("\nTime taken: %.6Lfs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
  124. #endif
  125.  
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement