当前位置: 首页 > news >正文

详细介绍:2024CSP-S提高组第二轮试题及解析(第一题、决斗(duel))

一、先看原题:

二、形象化理解题目:

有一天,小 Q 得到了一堆“怪兽卡牌”,每张卡牌上写着一个数字,比如:

1 2 3 1 2

每个数字代表这只怪兽的“实力”(攻击力=防御力)。

游戏规则是:

一只怪兽如果攻击另一只怪兽,只有当自己的数字 > 对方的数字时,才能把对方打退场。

数字小的打不动数字大的。

数字一样的,也打不动。


三、我们的重要发现:

第一件重要的事:同样数字的怪兽打不动彼此!

比如两只“2”的怪兽:

2 攻击 2 -> 失败(2不能大于2)

所以:

数字一样的怪兽无论怎么攻击,都不会减少数量!

它们会一起“活到最后”。


第二件重要的事:数字相同的怪兽越多,越难消灭

比如有 5 只怪兽:

2 2 2 1 3

其中“2”有 3 只。

那这 3 只“2”是无法互相消灭的,
而且数字比 2 小的“1”不能打它们,
只有“3”能攻击它们。

但只有 1 只“3”,它最多只能打一只。

最后,“2”们还是会剩下几只。

所以:

最终剩下的怪兽数量,最少也要 ≥ 最多的那个数字出现了几次。

因为这些怪兽互相消灭不了。

我们叫这个为:

众数的数量(出现次数最多的数字的数量)


第三个重要的事:真的能做到只剩下“众数的怪兽”吗?

答案:可以!

具体策略:

  1. 让“大的怪兽”去吃掉比自己小的怪兽

  2. “更大的怪兽”再去吃掉“刚刚那个怪兽”

  3. 一直这样“吃来吃去”

所以最终一定可以做到:

最后剩下的怪兽数量  =  出现次数最多的数字的数量。


四、这是不是贪心算法呢?

1、 这是“隐含地使用了贪心思想”,但不需要写贪心过程

因为我们不用真的模拟每一次攻击,而是直接通过数学分析知道最优策略。

就像有时候:

  • 不需要真的走楼梯

  • 只要算出步数

  • 就能知道最快时间

这里也是一样:

我们通过贪心策略确定“最少能剩多少只怪兽”后,发现这个值就是数字出现最多的次数。


2、那它的“贪心原则”到底是什么?

这道题里的贪心原则非常清晰:

贪心原则:永远让“大怪兽”去吃“小怪兽”。

能吃就吃最弱的,永远先把最容易消灭的怪兽吃掉。

这是从“游戏中每个怪兽只能攻击一次”的规则出发。

因为:

  • 大怪兽能吃掉小怪兽

  • 小怪兽不能吃掉大怪兽

  • 同数字怪兽互相吃不掉

  • 大怪兽太宝贵,不能浪费在不该吃的人身上

  • 所以必须把每一次攻击都用在“最弱的怪兽”身上

这就是典型贪心思想:

每一步都做“当前最有利”的选择:
去减少最弱的怪兽。


3、贪心能做到什么?

 贪心能保证:

所有“非众数”的怪兽,都可以通过一连串“大吃小”被全部消灭。

这就是为什么我们最终能做到:

最后只剩下出现最多那一类怪兽(众数)。

贪心策略给出了一个可行方案。


4、“贪心结果”为何就是众数?

因为同一个数字的怪兽互相无法攻击,所以它们永远消灭不完。

比如:

2, 2, 2

这三只永远不会互相吃,怎么贪心都不能减少它们的数量。

所以:

贪心能吃掉所有非众数怪兽

而观念上“吃不掉的怪兽数量”刚好就是“众数的数量”

这件事 不需要模拟,直接根据数学推导即可得出最优解。

于是:

⭐贪心思想决定了“最多能吃掉多少”

⭐数学逻辑决定了“最少会剩下多少(众数)”


五、参考程序:

#include 
using namespace std;
int main() {freopen("duel.in", "r", stdin);freopen("duel.out", "w", stdout);int n;cin >> n;// 存每个数字出现了几次unordered_map cnt;int x;int maxCount = 0;for (int i = 0; i < n; i++) {cin >> x;cnt[x]++;              // x 这个数字又出现了一次maxCount = max(maxCount, cnt[x]); // 更新最多次数}// 输出出现最多数字的次数cout << maxCount << endl;return 0;
}

六、总结:

想要让最后留下来的怪兽越少越好?
那只需要想一件事情:
哪些怪兽“不能互相消灭”?

答案就是数字相同的怪兽。

所以:

那些数字最多的怪兽,一定无法被打完。

因此输出:

出现次数最多的数字的个数

http://www.jsqmd.com/news/112046/

相关文章:

  • 数学_中考压轴_将军饮马
  • QtCreator的菜单栏不见了
  • 2025年专业工程律师推荐,工程律师哪家靠谱全解析 - 工业推荐榜
  • ROS1-c++编译开发-CMake-Rviz可视化工具-roslaunch-01 - jack
  • 【赵渝强老师】Docker的Container网络模式
  • 2025年视觉激光打标机源头厂家权威推荐榜单:双头视觉激光打标/CCD视觉自动激光打标机/生产线激光打标机源头厂家精选 - 品牌推荐官
  • 为什么协程能让程序不再卡顿?——从同步、异步到 C++ 实战
  • 2025年度精密轧机大型厂家排名:环保型精密轧机解析 - myqiye
  • 有的人,叫他用 AI 搜答案,他居然真只是填个答案
  • 详细介绍:从0到1:Dubbo分布式服务性能压测全指南(JMeter+Gatling实战对比)
  • 完整教程:openvela 使用 VSCode 调试 SIM 环境
  • 2025年温州比较不错的文武专业学校排行榜,资质齐全的文武学校品牌企业推荐 - mypinpai
  • 【赵渝强老师】Kubernetes命令行管理工具:kubectl
  • 2025认证乳化机供应商TOP5推荐:大型厂家选型指南,破解行业痛点助力高效生产 - 工业品牌热点
  • 2025年实力乳化机厂家排名:质量可靠的乳化机厂家选择标准全解析 - 工业推荐榜
  • 2025年初效过滤棉生产厂家五大推荐,看看哪家实力强? - myqiye
  • 【赵渝强老师】什么是Docker File?
  • 如何选择专业的热能粉尘回收生产厂家?2025年指南 - 2025年品牌推荐榜
  • 2025年度专业失效分析机构排名:专业失效分析专家与权威失效分析报告推荐 - mypinpai
  • 【赵渝强老师】Kubernetes的体系架构
  • 【赵渝强老师】Kubernetes的Pod
  • 2025年专业级大理石量具正规厂商推荐,定制化大理石量具企业全解析 - 工业品牌热点
  • edge浏览器关闭内容窗口圆角功能
  • 2025年12月北京产品经理培训公司综合评估与推荐指南 - 2025年品牌推荐榜
  • 2025年银川新媒体运营公司排名:汉唐数字传媒新媒体运营实力怎样 - mypinpai
  • 【学习笔记】数位dp
  • 2025年温州文武学校年度排名:浙江省温州市苍南县飞林文武学校实力解析 - myqiye
  • 直接执行与EXCU里执行,竟效果不同
  • 【赵渝强老师】使用二进制包方式安装Docker
  • 2025年十大孩子叛逆学校推荐:孩子叛逆情绪调节学校有哪些? - 工业品牌热点