_no0B

Untitled

Dec 11th, 2021
1,168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1.  
  2. void bfs(int src , mod){
  3.     memset(dis , -1 , sizeof dis);
  4.     queue < int > que(src);
  5.     dis[src] = 0;
  6.     par[src] = -1;
  7.     while(!que.empty()){
  8.         int a = que.front();
  9.         que.pop();
  10.         for(int i = 0 ; i < 10 ; i++){
  11.             int b = (a * 10 + i) % mod;
  12.             if(dis[b] != -1){
  13.                 dis[b] = dis[a] + 1;
  14.                 que.push(b);
  15.                 par[b] = a;
  16.                 digit[b] = i;
  17.             }
  18.         }
  19.     }
  20. }
  21.  
  22.  
  23.  
  24. int main()
  25. {
  26.     /// problem: https://www.spoj.com/problems/MULTII/en/
  27.  
  28.     int ans = MAX; /// min number of digits
  29.     for(int dig = 1 ; dig < 10 ; dig++){
  30.         if(valid[dig]){
  31.             bfs(dig % N , N);
  32.             if(dis[0] != -1) ans = min(ans , dis[0]);
  33.         }
  34.     }
  35.  
  36.     for(int dig = 1 ; dig < 10 ; dig++){
  37.         if(valid[dig]){
  38.             bfs(dig % N , N);
  39.             if(dis[0] == ans){
  40.                 string num;
  41.                 int cur = 0;
  42.                 int src = dig % N;
  43.                 while(cur != src){
  44.                     num += digit[cur] + '0';
  45.                     cur = par[cur];
  46.                 }
  47.                 num += dig + '0';
  48.                 reverse(num.begin() , num.end());
  49.                 cout<<num<<endl;
  50.                 return 0;
  51.             }
  52.         }
  53.     }
  54.  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment