洛谷P11231 [CSP-S 2024] 决斗
P11231 [CSP-S 2024] 决斗
题目描述
今天是小 Q 的生日,他得到了 \(n\) 张卡牌作为礼物。这些卡牌属于火爆的“决斗怪兽”,其中,第 \(i\) 张卡代表一只攻击力为 \(r_i\),防御力也为 \(r_i\) 的怪兽。
一场游戏分为若干回合。每回合,小 Q 会选择某只怪兽 \(i\) 以及另一只怪兽 \(j(i \neq j)\),并让怪兽 \(i\) 向怪兽 \(j\) 发起攻击。此时,若怪兽 \(i\) 的攻击力小于等于怪兽 \(j\) 的防御力,则无事发生;否则,怪兽 \(j\) 的防御被打破,怪兽 \(j\) 退出游戏不再参与到剩下的游戏中。一只怪兽在整场游戏中至多只能发起一次攻击。当未退出游戏的怪兽都已发起过攻击时,游戏结束。
小 Q 希望决定一组攻击顺序,使得在游戏结束时,未退出游戏的怪兽数量尽可能少。
输入格式
输入的第一行包含一个正整数 \(n\),表示卡牌的个数。
输入的第二行包含 \(n\) 个正整数,其中第 \(i\) 个正整数表示第 \(i\) 个怪兽的攻击力及防御力 \(r_i\)。
输出格式
输出一行包含一个整数表示游戏结束时未退出游戏的怪兽数量的最小值。
输入输出样例 #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\) 只怪兽向第 \(1\) 只怪兽发起攻击,第二回合让第 \(5\) 只怪兽向第 \(4\) 只怪兽发起攻击,第三回合让第 \(3\) 只怪兽向第 \(5\) 只怪兽发起攻击。此时没有退出游戏的怪兽都进行过攻击,游戏结束。可以证明没有更优的攻击顺序。
【样例 3】
见选手目录下的 duel/duel3.in 与 duel/duel3.ans。
该样例满足 \(\forall 1 \leq i \leq n, r_i \leq 2\)。
【样例 4】
见选手目录下的 duel/duel4.in 与 duel/duel4.ans。
【数据范围】
对于所有测试数据,保证:\(1 \leq n \leq 10^5\),\(1 \leq r_i \leq 10^5\)。
::cute-table{tuack}
| 测试点 | \(n\) | \(r_i\) | 特殊性质 |
|---|---|---|---|
| \(1\sim 4\) | \(\leq 10\) | \(\leq 10^5\) | 无特殊性质 |
| \(5\sim 10\) | \(\leq 10^5\) | \(\leq 2\) | ^ |
| \(11\sim 15\) | \(\leq 30\) | \(\leq 10^5\) | 特殊性质 A |
| \(16\sim 20\) | \(\leq 10^5\) | ^ | 无特殊性质 |
特殊性质 A:保证每个 \(r_i\) 在可能的值域中独立均匀随机生成。
思路
这题其实把给你的结论都推一推就可以了
我们不妨设攻击力高的优先攻击攻击力最小的
注意:每个怪兽只能攻击一次
推理出来有:答案=数量最多的攻击力数值(就是众数的数量)
为什么??
证明:
我现在假设ans为答案
攻击力为1的怪兽有n只,攻击力为2的怪兽有N只,攻击力为3的怪兽有m只
不妨设n,m<N
即要证:ans=N
首先m个3*8和N个2可以击败n个1是显然的(m+N>n恒成立)
这时还剩(m+N)只怪兽
然后这m个3还要杀死m个2,
这时还剩(m+N)-m=N只怪兽(2和3混在一起)
所以ans=N**
证毕
ACcode:
//解法1(我准备了两套说辞doge)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,R=0,ans;
int attack[N]; //attack[i]攻击力为i的怪兽数量
/*
优先用攻击力大的打攻击力小的
答案=数量最多的攻击力数值(众数的数量)
理由:
1.这类怪兽无法被同类击败
2.高攻击的怪兽数量没那么多,打不完这类的所有怪兽
(其实手玩一下样例分类讨论一下就可以得出这个结论)
*/
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
int r;
cin>>r;
attack[r]++;
//记录最大攻击力
R=max(r,R);
}
for(int i=1;i<=R;i++) ans=max(ans,attack[i]);
cout<<ans<<endl;
return 0;
}
//AUthor:AAA_jiancaipifa

浙公网安备 33010602011771号