目录
# faebdc玩扑克 篇p2021
## 题目背景
faebdc 和 zky 在玩一个小游戏
## 题目描述
zky 有 $n$ 个扑克牌,编号从 $1$ 到 $n$,zky 把它排成一个序列,每次把最上方的扑克牌放在牌堆底,然后把下一张扑克牌拿出来输出,最终输出的序列恰好是从 $1$ 到 $n$,faebdc 问你原序列是什么,因为 faebdc 神犇早已在 $\mathcal O (1)$ 的时间得出结果,如果你在 1 s 内答不出来,faebdc 会吃了你。
## 输入格式
一个整数 n,表示扑克数目。
## 输出格式
$n$ 个数,表示扑克序列。
## 样例 #1
### 样例输入 #1
```
13
```
### 样例输出 #1
```
7 1 12 2 8 3 11 4 9 5 13 6 10
```
## 提示
1<n<10^6
题解:反约瑟夫环
#include <iostream>
using namespace std;
int a[1000001], n, s;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {//有10个输出
for (int j = 1; j <= 2; j++)//第二个才是输出
{
s++;
if (s > n)//要形成一个环,如果s>n,就让s=1开始
s = 1;
if (a[s] != 0)//要找空隙输出,数值不要覆盖
j--;
}
a[s] = i;
}
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
return 0;
}
# 公路维修问题p2242
## 题目描述
由于长期没有得到维修,A国的高速公路上出现了 $n$ 个坑。为了尽快填补好这 $n$ 个坑,A国决定对 $m$ 处地段采取交通管制。为了求解方便,假设A国的高速公路只有一条,而且是笔直的。现在给出 $n$ 个坑的位置,请你计算,最少要对多远的路段实施交通管制?
## 输入格式
输入数据共两行,第一行为两个正整数 n, m。第二行给出了 n 个坑的坐标(坐标值均在长整范围内,按从小到大的顺序给出,且不会有两个点坐标相同)。
## 输出格式
仅一行,为最小长度和。
## 样例 #1
### 样例输入 #1
```
18 4
3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43
```
### 样例输出 #1
```
25
```
## 提示
[样例说明]
3−8,14−21,25−31,40−43。
题解:
#include"iostream"
#include"algorithm"
using namespace std;
int main(){
int n, m,a[100000],b[100000],ans;
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int j = 1;j <= n; j++){
b[j] = a[j+1] - a[j];
}
sort(b+1,b+n,greater<int>());
ans = a[n] - a[1] + 1;
for (int i = 1;i < m;i++){
ans = ans - b[i] + 1;
}
cout << ans;
return 0;
}