Advertisement
Plabon_dutta

Day4 Prb I

Oct 13th, 2022
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include<cmath>
  3. #include<vector>
  4. #include<string>
  5. #include<algorithm>
  6.  
  7. using namespace std;
  8.  
  9. typedef long long int ll;
  10.  
  11. const ll mod = 1e9+7;
  12.  
  13. #define pi atan(1)*4
  14. #define sc scanf
  15. #define pf printf
  16. #define fin for(ll i=0; i<n; i++)
  17. #define fiz for(ll i=n-1; i>=0; i--)
  18. #define fjm for(ll j=0; j<m; j++)
  19. #define fr(i,a,n) for(ll i=a; i<n; i++)
  20. #define pb push_back
  21. #define pb2(x,y) push_back(make_pair(x,y))
  22. #define INF 1e18
  23. #define nl '\n'
  24. #define sz(a) a.size()
  25. #define readfirst() (ios_base:: sync_with_stdio(false),cin.tie(NULL));
  26. #define make(a,n) memset(a, n, sizeof(a))
  27. #define all(x) x.begin(),x.end()
  28. #define F first
  29. #define S second
  30. #define fixpre(x) fixed << setprecision(x)
  31.  
  32. void OJ() {
  33.     #ifndef ONLINE_JUDGE
  34.     freopen("input.txt","r", stdin);
  35.     freopen("output.txt","w", stdout);
  36.     #endif
  37. }
  38.  
  39. ll gcd(ll p, ll q) {
  40.     return q==0?p:gcd(q,p%q);
  41. }
  42.  
  43. bool isPowerOfTwo(ll n) {
  44.    if(n==0) return false;
  45.    return (ceil(log2(n)) == floor(log2(n)));
  46. }
  47.  
  48. ll power(ll a, ll n) {
  49.     if(n==1) return a%mod;
  50.     ll x=power(a,n/2);
  51.     if(n%2==0) return (x*x)%mod;
  52.     else return (x*x)%mod*a%mod;
  53. }
  54.  
  55. ll digitSum(ll n) {
  56.     ll s=0;
  57.     while(n>0) {
  58.         s+=n%10;
  59.         n/=10;
  60.     }
  61.     return s;
  62. }
  63.  
  64. ll fact(ll n){
  65.     return tgamma(n + 1);
  66. }
  67.  
  68. bool isPrime(ll n) {
  69.     if (n <= 1) return false;
  70.     for (ll i=2; i*i<=n; i++) {
  71.         if (n % i == 0) return false;
  72.     }
  73.     return true;
  74. }
  75.  
  76. int main() {
  77.     auto st = clock();
  78.     readfirst();
  79.     OJ();
  80.  
  81.     ll testcase=1, count=1;
  82.     // cin >> testcase;
  83.     // cin.ignore();
  84.     while(testcase--) {
  85.         // cout << "Case " << count++ << ": ";
  86.         string s, ss="";
  87.         cin >> s;
  88.         ss+=s[0];
  89.         ll ans=1, n=sz(s);
  90.         map<char,vector<ll>> m;
  91.         map<char,ll> mm;
  92.         mm[s[0]]++;
  93.         m[s[0]].pb(0);
  94.         ll in;
  95.         // cout << ss << nl;
  96.         for(ll i=1; i<n; i+=in) {
  97.             ll last;
  98.             if(s==ss) break;
  99.             map<char,ll> mmm;
  100.             mmm=mm;
  101.             for(ll j=i; j<n; j++) {
  102.                 if(j==i) {
  103.                     if(!sz(m[s[j]])) {
  104.                         ss+=s[j];
  105.                         // cout << "Chk1 " << count++ << " : " << ss << nl;
  106.                         m[s[j]].pb(sz(ss)-1);
  107.                         mm[s[j]]++;
  108.                         mmm[s[j]]--;
  109.                         ans++;
  110.                         in=1;
  111.                         break;
  112.                     }
  113.                     else{
  114.                         last=m[s[j]].front();
  115.                         mmm[s[j]]--;
  116.                     }
  117.                     if(j==n-1) {
  118.                         string tt=s.substr(i,j-i+1);
  119.                         for(auto k:tt) {
  120.                             ss+=k;
  121.                             m[k].pb(sz(ss)-1);
  122.                             mm[k]++;
  123.                             mmm[k]--;
  124.                         }
  125.                         // cout << "Chk2 " << count++ << " : " << ss << nl;
  126.                         ans++;
  127.                     }
  128.                 }
  129.                 else {
  130.                     ll r=-1;
  131.                     for(auto k:m[s[j]]) {
  132.                         if(k>r) r=k;
  133.                     }
  134.                     if(!sz(m[s[j]]) || r<last) {
  135.                         string tt=s.substr(i,j-i);
  136.                         for(auto k:tt) {
  137.                             ss+=k;
  138.                             m[k].pb(sz(ss)-1);
  139.                             mm[k]++;
  140.                             mmm[k]--;
  141.                         }
  142.                         // cout << "Chk3 " << count++ << " : " << ss << nl;
  143.                         ans++;
  144.                         in=j-i;
  145.                         break;
  146.                     }
  147.                     else {
  148.                         if(j==n-1 && mmm[s[j]]) {
  149.                             string tt=s.substr(i,j-i+1);
  150.                             for(auto k:tt) {
  151.                                 ss+=k;
  152.                                 m[k].pb(sz(ss)-1);
  153.                                 mm[k]++;
  154.                                 mmm[k]--;
  155.                             }
  156.                             // cout << "Chk4 " << count++ << " : " << ss << nl;
  157.                             ans++;
  158.                             break;
  159.                         }
  160.                         ll temp=last;
  161.                         for(auto k:m[s[j]]) {
  162.                             if(k>last) {
  163.                                 last=k;
  164.                                 break;
  165.                             }
  166.                         }
  167.                         if(last==temp) {
  168.                             string tt=s.substr(i,j-i);
  169.                             for(auto k:tt) {
  170.                                 ss+=k;
  171.                                 m[k].pb(sz(ss)-1);
  172.                                 mm[k]++;
  173.                                 mmm[k]--;
  174.                             }
  175.                             // cout << "Chk5 " << count++ << " : " << ss << nl;
  176.                             ans++;
  177.                             in=j-i;
  178.                             break;
  179.                         }
  180.                     }
  181.                 }
  182.             }  
  183.         }
  184.         // cout << ss << nl;
  185.         // set<char> sss;
  186.         // for(auto i:ss) {
  187.         //     sss.insert(i);
  188.         // }
  189.         cout << ans << nl;
  190.         // for(auto i:sss) {
  191.         //     cout << i << " : ";
  192.         //     for(auto j:m[i]) cout << j << " ";
  193.         //     cout << nl;
  194.         // }
  195.     }  
  196.    
  197.  
  198.     // while(cin >> n) {
  199.     //     if(n==0) break;
  200.        
  201.     // }
  202.     cerr << 1.0 * (clock()-st) / CLOCKS_PER_SEC << " Seconds" << nl;
  203.     return 0;
  204. }
  205.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement