63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 快速排序的败北
 | 
						||
 | 
						||
## 题目背景
 | 
						||
 | 
						||
小C写出如下快速排序程序:
 | 
						||
```cpp
 | 
						||
int n, a[1005];
 | 
						||
int cnt = 0;
 | 
						||
int partition(int l, int r) {
 | 
						||
    cnt += r-l+1;
 | 
						||
    swap(a[l], a[(l+r)/2]);
 | 
						||
    int i = l+1, j = r, x = a[l];
 | 
						||
    while(1){
 | 
						||
        while(a[i]<x && i<=r) i++;
 | 
						||
        while(a[j]>x && j>=l+1) j--;
 | 
						||
        if(i>=j) break;
 | 
						||
        swap(a[i],a[j]);
 | 
						||
        i++;j--;
 | 
						||
    }
 | 
						||
    swap(a[l],a[j]);
 | 
						||
    return j; 
 | 
						||
}
 | 
						||
 | 
						||
void qsort(int l, int r){
 | 
						||
    if(l >= r) return;
 | 
						||
    int m = partition(l,r);//分
 | 
						||
    qsort(l,m-1);//解
 | 
						||
    qsort(m+1,r);
 | 
						||
}
 | 
						||
 | 
						||
int main(){
 | 
						||
	n = 1000;
 | 
						||
   for(int i=1;i<=n;i++) cin>>a[i];
 | 
						||
   qsort(1,n);
 | 
						||
   return 0;
 | 
						||
}
 | 
						||
```
 | 
						||
 | 
						||
## 题目描述
 | 
						||
 | 
						||
你做为出题人,想要让小C的快排程序复杂度退化为 $O(n^2)$。
 | 
						||
 | 
						||
给定整数 $k$,请你构造一组 $n=1000$ 的数据,使得小C的程序运行结束时,计数器 `cnt` 的值超过 $k$。
 | 
						||
 | 
						||
请认真阅读【评分方式】
 | 
						||
 | 
						||
## 输入格式
 | 
						||
 | 
						||
输入1个整数 $k$,代表 `cnt` 要超过的值
 | 
						||
 | 
						||
## 输出格式
 | 
						||
 | 
						||
输出一行包含 $n=1000$ 个 `int` 范围整数
 | 
						||
 | 
						||
## 提示
 | 
						||
 | 
						||
### 评分方式
 | 
						||
 | 
						||
共10个测试点,每个测试点10分。
 | 
						||
- 若输入不合法(数字个数少于或者多于 $1000$,格式不对),得 $0$ 分;
 | 
						||
- 否则 `checker` 会执行小C的快排程序并计算 `cnt` 的值,若最终 $cnt>k$ 则得10分、否则得0分。
 | 
						||
 | 
						||
对于第 $i$ 个测试点,$k=400\times 2^i$。 |