比赛传送门
A
写一个排序函数,排序之后跟原数组比较即可得出答案
Code
1 | bool cmp(const pair<int,int> &a,const pair<int,int> &b) { |
B
没什么好说的,对于任一点数,两人持有该点数的牌的总数超过4就要变化
Code
1 | void solve(){ |
C
对于每一个点数,单独看有的花色(用set记录):
花色种类为 $2$ 或者 $3$ ,那么该点数可以出一个对
花色种类为 $4$ ,那么该点数可以出两个对
因为要给出操作方案,所以我们还要记录下标,每一个点数的一个花色只用记录一个小标就够了,多了也没有用(也就是配合set记录)
Code
1 | void solve(){ |
D
在补题专题中,补题链接在最后
E
出牌次数即为连续段个数
由于保证每个数不同,对于每一个新加进来的数 $x$ :
如果 $x$ 相邻的两个数都还不在当前队列中,那么相当于多了一个连续段,即 $ans++$
如果 $x$ 相邻的两个数都在当前队列中,那么相当于连接了两个连续段,也就是减少了一个连续段,即 $ans--$
其他情况对答案没有影响
Code
1 | void solve(){ |
F
受上一题的启发,我们假设新添加的 $x$ 形成一个新的连续段,先将答案加一
如果 添加后 $cnt[x]<=cnt[x-1]$ 那么可以将 $x$ 放到以 $x-1$ 为末尾的连续段,答案可以减一
如果 添加后 $cnt[x]<=cnt[x+1]$ 那么可以将 $x$ 放到以 $x+1$ 为首的连续段,答案可以减一
最后就是注意边界
Code
1 | void solve(){ |
G
在补题专题中
说些什么吧!