Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
56
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 <fstream>
  3. #include <vector>
  4. #include <set>
  5. #include <map>
  6. #include <string>
  7. #include <cmath>
  8. #include <cassert>
  9. #include <ctime>
  10. #include <algorithm>
  11. #include <queue>
  12. #include <memory.h>
  13. #include <stack>
  14. #define mp make_pair
  15. #define pb push_back    
  16. #define setval(a,v) memset(a,v,sizeof(a))
  17.  
  18. #if ( _WIN32 || __WIN32__ )
  19.     #define LLD "%I64d"
  20. #else
  21.     #define LLD "%lld"
  22. #endif
  23.  
  24. using namespace std;
  25.  
  26. typedef long long int64;
  27. typedef long double ld;
  28.  
  29. typedef short int sint;
  30.  
  31. int a[110];
  32.  
  33. int t[1100000][2];
  34.  
  35.  
  36. int main()
  37. {
  38.   #ifdef LOCAL
  39.     freopen("input.txt","r",stdin);
  40.     freopen("output.txt","w",stdout);
  41.   #endif
  42.     string s;
  43.     int n;
  44.     cin>>s>>n;
  45.     reverse(s.begin(),s.end());
  46.     int st=1%n;
  47.     assert(s.size()>20 || ((1<<s.size())>n));
  48.    
  49.     int cur=0;
  50.    
  51.     int sz=s.size();
  52.    
  53.     for (int i=0;i<sz;i++){
  54.         if (s[i]=='0')
  55.             a[i]=st;
  56.         else{
  57.             a[i]=n-st; 
  58.             if (a[i]==n) a[i]=0;
  59.             cur+=st;
  60.         }
  61.         if (cur>=n) cur-=n;
  62.         st=st*2;
  63.         if (st>=n) st-=n;  
  64.     //  cerr<<a[i]<<endl;
  65.     }
  66.    
  67.     for (int i=0;i<n;i++)
  68.         t[i][0]=t[i][1]=200;
  69.     t[cur][0]=0;
  70.     int cnt=0;
  71.     int cnt1=1;
  72.     for (int i=0;i<sz;++i){
  73.         int tmp=a[i];
  74.         if (tmp==0) continue;
  75.         for (int j=0;j<n;++j){
  76.             if (t[tmp][cnt1]>t[j][cnt]+1)
  77.                 t[tmp][cnt1]=t[j][cnt]+1;
  78.             if (t[j][cnt1]>t[j][cnt])
  79.                 t[j][cnt1]=t[j][cnt];
  80.             t[j][cnt]=200; 
  81.             ++tmp;
  82.             if (tmp>=n) tmp-=n;
  83.         }
  84.         cnt^=1;
  85.         cnt1^=1;
  86.     }
  87.     printf("%d\n",t[0][cnt]);  
  88.    
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement