bdfz_2024_summer/day3/T433080/T433080.md
2024-08-04 08:10:26 +08:00

63 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 快速排序的败北
## 题目背景
小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$。