shamiul93

LightOJ Number Transfromation

Feb 12th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. ///@authorRummanBUETCSE
  2.  
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<queue>
  7. #include<vector>
  8. #include<cstdio>
  9.  
  10. using namespace std;
  11.  
  12. #define PII pair<int,int>
  13. #define ll long long int
  14.  
  15. ll prime[1010];
  16. vector<ll> v[1010];
  17.  
  18. ll s, t;
  19.  
  20. // 0,1 aren't counted...
  21. void seive()
  22. {
  23.  
  24.     for (ll i = 4; i < 1009; i+=2)
  25.     {
  26.         prime[i] = -1;
  27.     }
  28.  
  29.     for (ll i = 3; i <= 501; i+=2)
  30.     {
  31.         for (ll j = 2 * i; j <= 1003; j += i)
  32.         {
  33.             prime[j] = -1;
  34.         }
  35.     }
  36. }
  37.  
  38. void creategraph()
  39. {
  40.     for (ll i = 3; i <= 1000; i++)
  41.     {
  42.         if (i % 2 == 0)
  43.         {
  44.             v[i].push_back(2);
  45.         }
  46.         for (ll j = 3; j <= 1001; j += 2)
  47.         {
  48.             if (prime[j] == 0 && j!= i && j!=1 && i%j == 0)
  49.             {
  50.                 v[i].push_back(j);
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. ll bfs()
  57. {
  58.     queue<ll> q;
  59.     int MoveNumber[1001];
  60.     ll sum;
  61.     memset(MoveNumber, -1, sizeof(MoveNumber));
  62.  
  63.     q.push(s);
  64.     MoveNumber[s] = 0;
  65.     while (!q.empty())
  66.     {
  67.         ll node;
  68.         node = q.front();
  69.         q.pop();
  70.         for (ll i = 0; i < v[node].size(); i++)
  71.         {
  72.             sum = node + v[node][i];
  73.             if (sum <= t && MoveNumber[sum] == -1)
  74.             {
  75.                 MoveNumber[sum] = MoveNumber[node] + 1;
  76.                 q.push(sum);
  77.                 if (sum == t)
  78.                     return MoveNumber[sum]; /// at this case , MoveNumber[sum] == MoveNumber[t]
  79.             }
  80.         }
  81.     }
  82.  
  83.     return MoveNumber[t];
  84. }
  85.  
  86. int main()
  87. {
  88.     seive();
  89.     creategraph();
  90.  
  91.     ll T, ans, cs = 0  ;
  92.     cin >> T;
  93.     while (T--)
  94.     {
  95.         cs++;
  96.         cin >> s >> t;
  97.         ans = bfs();
  98.         printf("Case %lld: %lld\n", cs, ans);
  99.     }
  100.  
  101.     return 0;
  102. }
Add Comment
Please, Sign In to add comment