打卡信奥刷题(877)用C++信奥P11231[普及组/提高] [CSP-S 2024] 决斗

P11231 [CSP-S 2024] 决斗

题目描述

今天是小 Q 的生日,他得到了 n n n 张卡牌作为礼物。这些卡牌属于火爆的“决斗怪兽”,其中,第 i i i 张卡代表一只攻击力为 r i r_i ri,防御力也为 r i r_i ri 的怪兽。

一场游戏分为若干回合。每回合,小 Q 会选择某只怪兽 i i i 以及另一只怪兽 j ( i ≠ j ) j(i \neq j) j(i=j),并让怪兽 i i i 向怪兽 j j j 发起攻击。此时,若怪兽 i i i 的攻击力小于等于怪兽 j j j 的防御力,则无事发生;否则,怪兽 j j j 的防御被打破,怪兽 j j j 退出游戏不再参与到剩下的游戏中。一只怪兽在整场游戏中至多只能发起一次攻击。当未退出游戏的怪兽都已发起过攻击时,游戏结束。

小 Q 希望决定一组攻击顺序,使得在游戏结束时,未退出游戏的怪兽数量尽可能少。

输入格式

输入的第一行包含一个正整数 n n n,表示卡牌的个数。

输入的第二行包含 n n n 个正整数,其中第 i i i 个正整数表示第 i i i 个怪兽的攻击力及防御力 r i r_i ri

输出格式

输出一行包含一个整数表示游戏结束时未退出游戏的怪兽数量的最小值。

输入输出样例 #1

输入 #1

5
1 2 3 1 2

输出 #1

2

输入输出样例 #2

输入 #2

10
136 136 136 2417 136 136 2417 136 136 136

输出 #2

8

说明/提示

【样例 1 解释】

其中一种最优方案为:第一回合让第 2 2 2 只怪兽向第 1 1 1 只怪兽发起攻击,第二回合让第 5 5 5 只怪兽向第 4 4 4 只怪兽发起攻击,第三回合让第 3 3 3 只怪兽向第 5 5 5 只怪兽发起攻击。此时没有退出游戏的怪兽都进行过攻击,游戏结束。可以证明没有更优的攻击顺序。

【样例 3】

见选手目录下的 duel/duel3.in 与 duel/duel3.ans。

该样例满足 ∀ 1 ≤ i ≤ n , r i ≤ 2 \forall 1 \leq i \leq n, r_i \leq 2 ∀1in,ri2

【样例 4】

见选手目录下的 duel/duel4.in 与 duel/duel4.ans。

【数据范围】

对于所有测试数据,保证: 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105 1 ≤ r i ≤ 1 0 5 1 \leq r_i \leq 10^5 1ri105

测试点 n n n r i r_i ri 特殊性质
1 ∼ 4 1\sim 4 14 ≤ 10 \leq 10 10 ≤ 1 0 5 \leq 10^5 105 无特殊性质
5 ∼ 10 5\sim 10 510 ≤ 1 0 5 \leq 10^5 105 ≤ 2 \leq 2 2 无特殊性质
11 ∼ 15 11\sim 15 1115 ≤ 30 \leq 30 30 ≤ 1 0 5 \leq 10^5 105 特殊性质 A
16 ∼ 20 16\sim 20 1620 ≤ 1 0 5 \leq 10^5 105 ≤ 1 0 5 \leq 10^5 105 无特殊性质

特殊性质 A:保证每个 r i r_i ri 在可能的值域中独立均匀随机生成。

C++实现

#include
const int N=1e5+6;
int n,x,mp[N],ans;
int main()
{
scanf(“%d”,&n);
while(n–)
{
scanf(“%d”,&x);
ans=std::max(ans,++mp[x]);
}
printf(“%d\n”,ans);
return 0;
}

打卡信奥刷题(877)用C++信奥P11231[普及组/提高] [CSP-S 2024] 决斗_第1张图片

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

你可能感兴趣的:(C++,c++,算法,开发语言,青少年编程,数据结构)