Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. #define KONJ 42 - 42
  6. #define INF 105
  7.  
  8. using namespace std;
  9.  
  10. int N, len;
  11. char s[150];
  12. int niz[150];
  13. short memo[110][1000010];
  14.  
  15. int solve( int curr, int val ){
  16.  
  17.     int ret = 0;
  18.     if ( curr == len ){ return INF; }
  19.     if ( val == 0 ){ return memo[curr][val] = 0; }
  20.     if ( memo[curr][val] > 0 ){ return memo[curr][val]; }
  21.  
  22.     ret = min( solve( curr + 1, val ), 1 + solve( curr + 1, ( val + niz[ curr + 1 ] ) % N ) );
  23.     return memo[curr][val] = ret;
  24.    
  25. }
  26.  
  27. int main( void ){
  28.  
  29.     scanf( "%s", s ); len = strlen( s );
  30.     scanf( "%d", &N );
  31.    
  32.     int ostatak = 0;
  33.     for ( int i = len - 1; i >= 0; --i ){
  34.         if ( i == len - 1 ){ niz[i] = 1 % N; } else { niz[i] = niz[i + 1] * 2; niz[i] %= N; }
  35.         if ( s[i] == '1' ){ ostatak += niz[i]; ostatak %= N; }
  36.         // printf( "%d %c %d %d\n", ostatak, s[i], niz[i], i );
  37.     }
  38.    
  39.     for ( int i = 0; i < len - 1; ++i ){
  40.         if ( s[i] == '1' ){ niz[i] = N - niz[i]; }
  41.     }
  42.    
  43.     //printf( "%d\n", ostatak );
  44.     printf( "%d\n", solve( 0, ostatak ) );
  45.  
  46.     return KONJ;
  47.  
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement