Advertisement
Sameer_Mishra100

JEDNAKOS of SPOJ

Sep 15th, 2021
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5.  
  6. /** learnings
  7. _compare true means small false means large
  8. */
  9.  
  10. int t[1000][5000];
  11. int p[1000];
  12. int makeNum(string s,int l,int r){
  13.     int ans=0;
  14.     for(int i=l;i<=r;i++){
  15.         int pos = (int)(s[i]-'0');
  16.         ans *= 10;
  17.         ans += pos;
  18.     }
  19.     return ans;
  20. }
  21. int fun(string s,int sm,int l,int r){
  22.     if(l==r+1)return INT_MAX-1;
  23.     if(r-p[l]+1<=4){
  24.         if(makeNum(s,p[l],r)==sm){
  25.             return 0;
  26.         }
  27.     }
  28.     int &res = t[l][sm];
  29.     if(res!=-1)return res;
  30.     int ans=INT_MAX-1;
  31.     for(int k=p[l],cnt=1;(k<=r && cnt<=4);k++,cnt++){
  32.         int pos = makeNum(s,p[l],k);
  33.         int cur=INT_MAX-1;
  34.         if(pos<=sm){
  35.             cur=1+fun(s,sm-pos,k+1,r);
  36.             ans = min(ans,cur);
  37.         }
  38.     }
  39.     return res = ans;
  40. }
  41. void solve(){
  42.     memset(t,-1,sizeof(t));
  43.     string s;cin>>s;
  44.     int sm=0,i,pd=0;
  45.     int n = s.length();
  46.     for(i=n-1;s[i]!='=';i--){
  47.         int pos = (int)(s[i]-'0');
  48.         if(pd==0)pd=1;
  49.         else pd*=10;
  50.         sm+=pos*pd;
  51.     }
  52.     p[i-1]=i-1;
  53.     for(int j=i-2;j>=0;j--){
  54.         p[j] = (s[j]=='0'?p[j+1]:j);
  55.     }
  56.     cout<<fun(s.substr(0,i),sm,0,i-1);
  57. }
  58. int main(){
  59.     ios::sync_with_stdio(0);
  60.     cin.tie(0);
  61.         solve();
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement