zoukankan      html  css  js  c++  java
  • 题解 SP2727 【ARMY

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

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

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

    好了,这就结束了。

    注明:本题解为防抄,只采用部分代码。

  • 相关阅读:
    约瑟夫问题的解法集锦
    java调用com组件将office文件转换成pdf
    hdu(1069)——Monkey and Banana(LIS变形)
    Unix网络编程之环境搭建
    atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t
    怎样使Dialog像Activity一样随心所欲的使用?
    获取全部分组中某列最大的行
    Class C++
    spring mvc +Mybatis3.1 整合的时候异常
    Linux 编译C++ 与 设置 Vim
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12347258.html
Copyright © 2011-2022 走看看