Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 50010
- #define OO 1000000010
- using namespace std;
- typedef pair<int,int> pii;
- int n, q;
- int mn;
- int n1;
- int dist[MAX];
- bool mod[MAX];
- bool marc[MAX];
- vector<int> w;
- vector<int> aux;
- set<pii> s;
- void Dijkstra(int i)
- {
- for(int g = 1 ; g < mn ; g++)
- {
- dist[g] = OO;
- s.insert(make_pair(OO,g));
- }
- dist[i] = 0;
- s.erase(make_pair(OO,i));
- s.insert(make_pair(0,i));
- while(!s.empty())
- {
- int cur = s.begin()->second;
- s.erase(s.begin());
- for(int g = 0 ; g < n ; g++)
- {
- int prox = (cur + w[g])%mn;
- int p = w[g];
- if(dist[prox] > dist[cur] + p)
- {
- s.erase(make_pair(dist[prox],prox));
- dist[prox] = dist[cur] + p;
- s.insert(make_pair(dist[prox],prox));
- }
- }
- }
- }
- int main()
- {
- scanf("%d",&n);
- mn = OO;
- for(int g = 1 ; g <= n ; g++)
- {
- scanf("%d",&n1);
- mn = min(mn , n1);
- aux.push_back(n1);
- }
- for(int g = 0 ; g < n ; g++)
- {
- if(mod[aux[g]%mn]) continue;
- mod[aux[g]%mn] = true;
- w.push_back(aux[g]);
- }
- n = w.size();
- Dijkstra(0);
- scanf("%d",&q);
- for(int g = 0 ; g < q ; g++)
- {
- scanf("%d",&n1);
- if(dist[n1%mn] > n1) printf("NIE\n");
- else printf("TAK\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement