Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define MAX 50010
  4. #define OO 1000000010
  5.  
  6. using namespace std;
  7. typedef pair<int,int> pii;
  8.  
  9. int n, q;
  10. int mn;
  11. int n1;
  12.  
  13. int dist[MAX];
  14.  
  15. bool mod[MAX];
  16. bool marc[MAX];
  17.  
  18. vector<int> w;
  19. vector<int> aux;
  20.  
  21. set<pii> s;
  22.  
  23. void Dijkstra(int i)
  24. {
  25. for(int g = 1 ; g < mn ; g++)
  26. {
  27. dist[g] = OO;
  28. s.insert(make_pair(OO,g));
  29. }
  30.  
  31. dist[i] = 0;
  32. s.erase(make_pair(OO,i));
  33. s.insert(make_pair(0,i));
  34.  
  35. while(!s.empty())
  36. {
  37. int cur = s.begin()->second;
  38. s.erase(s.begin());
  39.  
  40. for(int g = 0 ; g < n ; g++)
  41. {
  42. int prox = (cur + w[g])%mn;
  43. int p = w[g];
  44.  
  45. if(dist[prox] > dist[cur] + p)
  46. {
  47. s.erase(make_pair(dist[prox],prox));
  48. dist[prox] = dist[cur] + p;
  49. s.insert(make_pair(dist[prox],prox));
  50. }
  51. }
  52. }
  53. }
  54.  
  55. int main()
  56. {
  57. scanf("%d",&n);
  58.  
  59. mn = OO;
  60.  
  61. for(int g = 1 ; g <= n ; g++)
  62. {
  63. scanf("%d",&n1);
  64.  
  65. mn = min(mn , n1);
  66. aux.push_back(n1);
  67. }
  68.  
  69. for(int g = 0 ; g < n ; g++)
  70. {
  71. if(mod[aux[g]%mn]) continue;
  72.  
  73. mod[aux[g]%mn] = true;
  74. w.push_back(aux[g]);
  75. }
  76.  
  77. n = w.size();
  78.  
  79. Dijkstra(0);
  80.  
  81. scanf("%d",&q);
  82.  
  83. for(int g = 0 ; g < q ; g++)
  84. {
  85. scanf("%d",&n1);
  86.  
  87. if(dist[n1%mn] > n1) printf("NIE\n");
  88. else printf("TAK\n");
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement