zoukankan      html  css  js  c++  java
  • 湘大OJ第1486题 Civil War

      湘大OJ第1486题,Civil War题目链接)。

    Civil War

    Description

    战争即和平,自由即奴役,无知即力量。
    ——乔治.奥威尔

      历史书上说,自从统治者Big Brother去世以后,大洋国就陷入了无休止的内战中,随时都可能有新的武装势力出现,随时都可能有战争发生。奇怪的是,每次战争都是在当前国内战斗力最强大的两股势力间进行,我们可以把每股武装势力的战斗力量化成一个值,每次战争都是在当前战斗力值最高的两股势力间进行。如果有多支势力战斗力值相同,则名字字典序大的在前(见下面第二组样例)。一场战争结束后,战斗力稍弱的那方被消灭,另一方也元气大伤,战斗力减弱为两支武装的战斗力之差。如果发生战争的两方战斗力相同,则他们会同归于尽。

      历史书上详细记录了该段时期的事件,记录分为两种格式:

    1) New name value 其中namevalue是变量,表示一个名字叫做name,战斗力为value的新势力出现
    2) Fight 表示在当前最强的两股势力间发生了战争

    Input

      输入的第一行包含一个整数T (T ≤ 15),表示共有T组数据。接下来每组数据的第一行是一个整数N (N ≤ 50000),表示有N条记录。接下来N行,每行表示一条记录,记录的格式如上所述。输入保证每股势力的名字都不相同,势力的名字仅包含小写字母,长度不超过20。战斗力值为不超过10000的正整数。保证当战争发生时至少有两支势力存在。

    Output

      对每组数据,输出一行“Case X:”作为开头,此处X为从1开始的编号。注意首字母C为大写,在“Case”和编号X之间有一个空格,在编号X后面有一个冒号。然后对每条Fight记录输出一行,表示被消灭的势力的名字。如果是两支势力同归于尽,则这两个名字都应该输出,字典序大的在前,两个名字之间用一个空格隔开。

    Sample Input

    2
    5
    New obrien 100
    New winston 199
    Fight
    New julia 99
    Fight
    4
    New miniluv 100
    New minipax 100
    New minitrue 100
    Fight

    Sample Output

    Case 1:
    obrien
    winston julia
    Case 2:
    minitrue minipax

    Source

    “开启时代杯”湘潭市第二届大学生程序设计大赛 (Internet)

      这一题,没什么难度。用C++ STL中的multiset,插入新的军队。因为multiset每次在插入结点的会自动排序(内部的排序一般为平衡二叉树),排序速度比较快,不会超时。我的排序规则是按照军队实力从弱往强排列,相同的按字典序从小到大排序。每次截取最后两支军队打战,并删除这两个结点。战胜方插入multiset中。战败方按字典序输出。

      C++源代码如下:

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <set>
    
    using namespace std;
    
    typedef int COUNT;
    
    typedef struct
    {
        char name[24];
        int strength;
    } ARMY;
    
    bool operator<(const ARMY & a, const ARMY & b )
    {
        if ( a.strength == b.strength )
            return strcmp( a.name, b.name ) < 0;
        else
            return a.strength < b.strength;
    }
    
    bool operator>(const ARMY & a, const ARMY & b )
    {
        if ( a.strength == b.strength )
            return strcmp( a.name, b.name ) > 0;
        else
            return a.strength > b.strength;
    }
    
    void startCase(void)
    {
        int record;
        char cmd[8];
        ARMY army;
        ARMY army1, army2;
        multiset<ARMY> armies;
        multiset<ARMY>::iterator it;
    
        scanf( "%d", &record );
        while ( record -- )
        {
            scanf( "%s", cmd );
            if ( !strcmp( cmd, "New" ) )
            {
                scanf( "%s%d", army.name, &(army.strength) );
                armies.insert(army);
            }
            else
            {
                it = armies.end();
                it --;
                army1 = (*it);
                armies.erase(it);
                it = armies.end();
                it --;
                army2 = (*it);
                armies.erase(it);
                if ( army1.strength == army2.strength )
                {
                    if ( strcmp( army1.name, army2.name ) < 0 )
                        printf ( "%s %s\n", army2.name , army1.name );
                    else
                        printf ( "%s %s\n", army1.name , army2.name );
                }
                else if ( army1.strength < army2.strength )
                {
                    puts( army1.name );
                    army2.strength -= army1.strength;
                    armies.insert( army2 );
                }
                else
                {
                    puts( army2.name );
                    army1.strength -= army2.strength;
                    armies.insert( army1 );
                }
            }
        }
    }
    
    int main (void)
    {
        int testcases;
        COUNT i;
        scanf( "%d", &testcases );
        for ( i = 1 ; i <= testcases ; i ++ )
        {
            printf( "Case %d:\n", i );
            startCase( );
        }
        return EXIT_SUCCESS;
    }
  • 相关阅读:
    windows server 2012 如何开启 hyper-v 并创建虚拟机
    ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
    ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)
    ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)
    ABP框架系列之二十一:(Domain-Services-领域服务)
    ABP框架系列之二十:(Dependency-Injection-依赖注入)
    ABP框架系列之十九:(Debugging-调试)
    ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
    ABP框架系列之十七:(Data-Filters-数据过滤)
    ABP框架系列之十六:(Dapper-Integration-Dapper集成)
  • 原文地址:https://www.cnblogs.com/yejianfei/p/2624228.html
Copyright © 2011-2022 走看看