Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool cmp1(pair<int,int> A, pair<int,int> B) {
  5. return (A.second < B.second);
  6. }
  7. bool cmp2(pair<int,int> A, pair<int,int> B) {
  8. return (A.first < B.first);
  9. }
  10.  
  11. int main() {
  12. int t;
  13. scanf("%d",&t);
  14. while(t--) {
  15. bool res = true;
  16. long long s, k, n;
  17. scanf("%lld %lld %lld",&s,&k,&n);
  18. vector <long long> tab(n);
  19. for(int i = 0; i < n; i++) {
  20. scanf("%lld",&tab[i]);
  21. if(i) tab[i] += tab[i-1];
  22. }
  23. vector <pair<long long,long long> > arr;
  24. for(int i = 0; i < n; i+=2) {
  25. long long start;
  26. if(i) start = tab[i-1];
  27. else start = 0;
  28. long long len = tab[i]-start;
  29. start %= k;
  30. if(len > k) {
  31. res = false;
  32. } else if(start+len < k) {
  33. arr.push_back(make_pair(start,start+len));
  34. } else {
  35. arr.push_back(make_pair(start,k));
  36. arr.push_back(make_pair(0,(start+len)%k));
  37. }
  38. }
  39. if(!res) {
  40. printf("NIE\n");
  41. continue;
  42. }
  43.  
  44. sort(arr.begin(),arr.end(),cmp1);
  45. sort(arr.begin(),arr.end(),cmp2);
  46.  
  47. long long border = arr[0].first;
  48.  
  49. long long first = arr[0].first;
  50. long long last = arr[0].second;
  51. long long best = 0;
  52. for(int i = 1; i < arr.size(); i++) {
  53. if(arr[i].second > last) {
  54. if(arr[i].first <= last)
  55. last = arr[i].second;
  56. else {
  57. best = max(best,arr[i].first-last);
  58. last = arr[i].second;
  59. first = arr[i].first;
  60. }
  61. }
  62. }
  63. border += k-last;
  64. best = max(best,border);
  65. if(best >= s)
  66. printf("TAK\n");
  67. else
  68. printf("NIE\n");
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement