Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 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. bool visited[110][1000010];
  15.  
  16. int solve( int curr, int val ){
  17.  
  18.     int ret = 0;
  19.     if ( curr == len ){ return INF; }
  20.     if ( val == 0 ){ visited[curr][val] = true; return memo[curr][val] = 0; }
  21.     if ( visited[curr][val] ){ return memo[curr][val]; }
  22.  
  23.     visited[curr][val] = true;
  24.    
  25.     ret = min( solve( curr + 1, val ), 1 + solve( curr + 1, ( val + niz[ curr + 1 ] ) % N ) );
  26.     return memo[curr][val] = ret;
  27.    
  28. }
  29.  
  30. int main( void ){
  31.  
  32.     scanf( "%s", s ); len = strlen( s );
  33.     scanf( "%d", &N );
  34.    
  35.     int ostatak = 0;
  36.     for ( int i = len - 1; i >= 0; --i ){
  37.         if ( i == len - 1 ){ niz[i] = 1 % N; } else { niz[i] = niz[i + 1] * 2; niz[i] %= N; }
  38.         if ( s[i] == '1' ){ ostatak += niz[i]; ostatak %= N; }
  39.         // printf( "%d %c %d %d\n", ostatak, s[i], niz[i], i );
  40.     }
  41.    
  42.     for ( int i = 0; i < len - 1; ++i ){
  43.         if ( s[i] == '1' ){ niz[i] = N - niz[i]; }
  44.     }
  45.    
  46.     //printf( "%d\n", ostatak );
  47.     printf( "%d\n", solve( 0, ostatak ) );
  48.  
  49.     return KONJ;
  50.  
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement