fork(9) download
  1. #include <iostream>
  2. #include <queue>
  3. #include <string.h>
  4. #include <stdio.h>
  5. using namespace std;
  6. int visited[10005];
  7.  
  8.  
  9. int main()
  10. {
  11. int lock,unlck,r,kase = 1;
  12. while(cin>>lock>>unlck>>r && (lock||unlck||r))
  13. {
  14. int A[r];
  15. for(int i=0;i<r;++i)
  16. cin>>A[i];
  17. memset(visited,-1,sizeof visited);
  18. queue<int> q;
  19. q.push(lock);
  20. bool found = 0;
  21. visited[lock] = 0;
  22. while(!q.empty())
  23. {
  24.  
  25. int u = q.front(); q.pop();
  26. if(u == unlck)
  27. {
  28. found = 1;
  29. break;
  30. }
  31. for(int i=0;i<r;++i)
  32. {
  33. int x = (u+A[i])%10000;
  34. if(visited[x] != (-1) || x == lock)
  35. continue;
  36. visited[x] = visited[u] + 1;
  37. q.push(x);
  38.  
  39. }
  40. }
  41. if(!found)
  42. printf("Case %d: Permanently Locked\n",kase++);
  43. else
  44. printf("Case %d: %d\n",kase++,visited[unlck]);
  45.  
  46.  
  47. }
  48. }
  49.  
Success #stdin #stdout 0s 3516KB
stdin
0000 9999 1

1000

0000 9999 1

0001

5234 1212 3

1023 0101 0001

0 0 0
stdout
Case 1: Permanently Locked
Case 2: 9999
Case 3: 48