Time Limit: 2 second(s) | Memory Limit: 32 MB |
A small confusion in a problem set may ruin the whole contest. So, most of the problem setters try their best to remove any kind of ambiguity from the set. But sometimes it is not that important. For example, the mock contest of ICPC Dhaka Regional. As it is mock contest so we are not that serious with the set. We printed two problems, problem A in Page 1 and Problem B in Page 2. Then we remembered that we had to give rule of the contest too. Thus we printed the rule page. But we did not notice that the rule page was printed with Page 2. We were stapling 3 pages together. First rule page, then Problem A and at the last Problem B. So, the written page numbers were, 2, 1 and 2. This looked odd. But we already printed all the pages and if we want to fix the issue we had no other way but to print all the three pages. One among us suggested an explanation, "Well, first 2 means there are 2 pages after this page. 1 also means there is 1 page after this page. But the 2 in last page means there are 2 pages before this page." Interesting observation indeed! So we came up with a rule which is, page numberings of all the n pages are valid, if the page number at a page denotes number of page before this page or number of page after this page.
So with this rule, {3, 1, 2, 0} is valid but {3, 3, 1, 3} is not valid.
Input
Input starts with an integer T (≤ 60), denoting the number of test cases.
Each case starts with a line an integer n (1 ≤ n ≤ 10000) denoting the number of pages in the problem-set. The next line contains n space separated integers denoting the page number written on the pages. The integers lie in the range [0, 106].
Output
For each case, print the case number and "yes" if the pages can be shuffled somehow to meet the given restrictions. Otherwise print "no".
Sample Input |
Output for Sample Input |
2 4 0 3 1 2 4 1 3 3 3 |
Case 1: yes Case 2: no |
Notes
- For case 1, the pages can be shuffled in several ways so that the page numbering is valid. One of the valid shuffles is 3, 1, 2, 0.
- For case 2, there is no valid way to shuffle these.
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<queue> 7 #include<set> 8 #include<vector> 9 #include<map> 10 using namespace std; 11 int ans[20000]; 12 int flag[1000005]; 13 int main(void) 14 { 15 int i,j,k; 16 int s; 17 scanf("%d",&k); 18 for(s=1; s<=k; s++) 19 { 20 int n,m;memset(flag,0,sizeof(flag)); 21 scanf("%d",&n); 22 for(i=0; i<n; i++) 23 { 24 scanf("%d",&ans[i]); 25 flag[ans[i]]++; 26 } 27 int ask=0; 28 for(i=0;i<n;i++) 29 { 30 int q=i; 31 int p=n-i-1; 32 if(flag[q]) 33 { 34 flag[q]--; 35 } 36 else if(flag[p]) 37 { 38 flag[p]--; 39 } 40 else ask=1; 41 } 42 printf("Case %d: ",s); 43 if(ask) 44 printf("no "); 45 else printf("yes "); 46 } 47 return 0; 48 }