Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- bool cmp1(pair<int,int> A, pair<int,int> B) {
- return (A.second < B.second);
- }
- bool cmp2(pair<int,int> A, pair<int,int> B) {
- return (A.first < B.first);
- }
- int main() {
- int t;
- scanf("%d",&t);
- while(t--) {
- bool res = true;
- long long s, k, n;
- scanf("%lld %lld %lld",&s,&k,&n);
- vector <long long> tab(n);
- for(int i = 0; i < n; i++) {
- scanf("%lld",&tab[i]);
- if(i) tab[i] += tab[i-1];
- }
- vector <pair<long long,long long> > arr;
- for(int i = 0; i < n; i+=2) {
- long long start;
- if(i) start = tab[i-1];
- else start = 0;
- long long len = tab[i]-start;
- start %= k;
- if(len > k) {
- res = false;
- } else if(start+len < k) {
- arr.push_back(make_pair(start,start+len));
- } else {
- arr.push_back(make_pair(start,k));
- arr.push_back(make_pair(0,(start+len)%k));
- }
- }
- if(!res) {
- printf("NIE\n");
- continue;
- }
- sort(arr.begin(),arr.end(),cmp1);
- sort(arr.begin(),arr.end(),cmp2);
- long long border = arr[0].first;
- long long first = arr[0].first;
- long long last = arr[0].second;
- long long best = 0;
- for(int i = 1; i < arr.size(); i++) {
- if(arr[i].second > last) {
- if(arr[i].first <= last)
- last = arr[i].second;
- else {
- best = max(best,arr[i].first-last);
- last = arr[i].second;
- first = arr[i].first;
- }
- }
- }
- border += k-last;
- best = max(best,border);
- if(best >= s)
- printf("TAK\n");
- else
- printf("NIE\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement