题解 SP2727 ARMY - Army Strength
Posted ahawzlc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 SP2727 ARMY - Army Strength相关的知识,希望对你有一定的参考价值。
这是蒟蒻的第一篇题解,下面记录一下我做道题的真实思路过程。
首先看题,两个军队互怼,一个人一个人的打,战斗力高的获胜。
那我们可以考虑一下直接模拟,开两个数组,或者 vector 也行,然后输入每个人的战斗值,开两个指针,哪一方军队实力较差,就让它的指针向后一个位置。
我们又看到 1.46GB 的限制,那没问题,可劲造。
int t1=1,t2=1; while(t1<=n&&t2<=m) { if(a[t1]>=b[t2]) t2++; else t1++; } if(t1>n) puts("MechaGodzilla"); else puts("Godzilla");
差不多就是这个样子
这道题水,所以这就行了。
但我们这种好学生怎么能不继续探索呢?
我们可以用一个大根堆,每次用两个军队中较NB的两个士兵互怼,这样理论上可以有一点优化。
while(a.size()&&b.size()) { int t1=a.top(); int t2=b.top(); if(t1<t2)a.pop(); else b.pop(); } if(a.size()) { while(a.size()) a.pop(); puts("Godzilla"); } else { while(b.size()) b.pop(); puts("MechaGodzilla"); }
差不多就是这个样子。
欸,等等。
我们在想到堆后,可以直接想了:我们可以直接取每支军队中最NB的两个人。让他们俩进行巅峰对决。谁赢了就可以称霸世界 (滑稽)
为什么呢?因为在这场战争中,NB的那个人永远不会挂掉。所以只要拥有强者的一方,就能赢得胜利。
这样就比前两者都NB多了。
for(int i=1;i<=n;i++) { cin>>va; f1=max(va,f1); } for(int i=1;i<=m;i++) { cin>>va; f2=max(va,f2); } if(f1>=f2) puts("Godzilla"); else puts("MechaGodzilla");
好了,这就结束了。
注明:本题解为防抄,只采用部分代码。
以上是关于题解 SP2727 ARMY - Army Strength的主要内容,如果未能解决你的问题,请参考以下文章