题目意思:
给定n, expect, a, b 要求你构造一组array[],存放一个1..n的排列,使的下面的程序能输出YES
题目所示代码:
1 bool less_than(x, y) { 2 T++; 3 return x < y; 4 } 5 void work(array[], l, r) { 6 if (l >= r) return; 7 swap(array[(l * A + r * B) / (A + B)], array[r]); 8 int index = l; 9 for (i = l; i < r; i++) 10 if (less_than(array[i], array[r])) 11 swap(array[index++], array[i]); 12 swap(array[r], array[index]); 13 work(array, l, index - 1); 14 work(array, index + 1, r); 15 } 16 void main() { 17 T = 0; 18 Input(n, expect, A, B, array[]); 19 work(array, 0, n - 1); 20 if (T == expect) 21 Output("YES"); 22 else 23 Output("NO"); 24 }