码迷,mamicode.com
首页 > 其他好文 > 详细

题解 SP2727 【ARMY - Army Strength】

时间:2020-02-22 21:58:50      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:部分   math   html   puts   较差   bottom   世界   for   模拟   

这是蒟蒻的第一篇题解,下面记录一下我做道题的真实思路过程。

首先看题,两个军队互怼,一个人一个人的打,战斗力高的获胜。

那我们可以考虑一下直接模拟,开两个数组,或者 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】

标签:部分   math   html   puts   较差   bottom   世界   for   模拟   

原文地址:https://www.cnblogs.com/ahawzlc/p/12347258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!