• COGS 898. [咲 -Saki-] 天才麻将少女什么编


    ★☆   输入文件:sakinani.in   输出文件:sakinani.out   简单对比
    时间限制:1 s   内存限制:256 MB

    题目背景

    二十一世纪,世界上的麻将竞技人数超过一亿,日本每年也有大规模的全国大赛来对麻将选手进行选拔。从小学到高中,很多学校也设立了麻将部。

    《天才麻将少女阿知贺篇 episode of side-A》『 -Saki- 阿知賀編 episode of side-A』是《天才麻将少女》『 -Saki-』的外传,从另一个视角讲述麻将少女们的故事。故事背景设定在《天才麻将少女》本篇第二主角原村和曾生活的奈良县,主角校为阿知贺女子学院。(有问题?内事百度,外事谷歌)

    由于阿知贺人物存在感不够强,导致该作被称为“千里山篇”「 -Toki- 千里山編」,甚至 2012 年动画最萌也是千里山的園城寺怜同学。我们一直很疑惑这到底谁是主角,那么就让数据说话吧!

    题目要求

    我们给出一个人物列表,人物有其所属的学校。比如「松実玄」同学隶属「阿知賀女子学院」什么的。有的人物没有所属学校或没有明确给出其所属,可以无视。

    人物每一次出场都会给其学校增加一点存在感。有少数“被牌爱着的孩子”,即“魔物”会有非常高的存在感,出场一次会有普通人出场两次的存在感。

    我们需要统计,在给出的人物出场单中,哪个学校存在感最高,我们就把这篇动画命名为什么编。

    输入格式

    • 输入文件第一行为一个整数 n ,表示有多少人物出现。下面 n 行是人物列表,每两行有两个字符串 A 和 B ,表示人物 A 属于学校 B 。没有同名人物,不会重复出现人物。
    • 下面一行一个整数 k ,表示魔物的数量。接下来 k 行,每行一个字符串,表示魔物的姓名,不保证魔物在人物列表中。
    • 接下来直到文件末尾,每行有一个字符串(空行不算),表示出场人物,可能会出现不存在于上面列表中的人物。

    样例输入

    7
    宮永咲 清澄高校
    原村和 清澄高校
    片岡優希 清澄高校
    園城寺怜 千里山女子高校
    竹井久 清澄高校
    天江衣 龍門渕高校
    龍門渕透華 龍門渕高校
    2
    宮永咲
    天江衣
    
    原村和
    高鴨穏乃
    原村和
    片岡優希
    原村和
    宮永咲

    输出格式

    • 输出只有一行,即存在感最大的学校名称,并列第一则输出编码序小的一个。

    样例输出

    清澄高校

    数据范围及要求

    • 对于 70% 的数据,总出现次数不超过 10000。
    • 对于 100% 的数据,学校数量不超过 40 ,人物数量不超过 200 ,总出现次数不超过 1000000。
    • 对于 40% 的数据,字符串中只有大写和小写字母。
    • 对于 100% 的数据,字符串中会存在大小写字母、汉字和日语假名,且长度不超过 100 。为了简化问题,输入输出文件都使用 ANSI 编码(一个东亚字符占两字节)。

    模拟

    屠龙宝刀点击就送

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #define N 1000005
    using namespace std;
    struct node
    {
        string name,sch;
        bool flag;
    }stu[N];
    struct nodE
    {
        string sch;
        int sum;
        bool operator<(nodE a)const
        {
            if(sum==a.sum) return sch<a.sch;
            else return sum>a.sum;
        }
    }sv[N];
    bool sq[N];
    int n,m,num;
    int Main()
    {
        freopen("sakinani.in","r",stdin);
        freopen("sakinani.out","w",stdout);
        scanf("%d",&n);
        string a,b;
        for(int i=1;i<=n;++i)
        {
            cin>>stu[i].name>>stu[i].sch;
            for(int j=1;j<=num;++j)
            {
                if(sv[j].sch==stu[i].sch)
                goto flag;
            }
            sv[++num].sch=stu[i].sch;
            flag:;
        }
        scanf("%d",&m);
        for(;m--;)
        {
            cin>>a;
            for(int i=1;i<=n;++i)
                if(stu[i].name==a) stu[i].flag=true;
        }
        while(cin>>a)
        {
            b.clear();
            int sum=0;
            for(int i=1;i<=n;++i)
                if(stu[i].name==a)
                {
                    b=stu[i].sch;
                    if(stu[i].flag) sum=2;
                    else sum=1;
                    break;
                }
            if(!b.size()) continue;
            for(int i=1;i<=num;++i)
            if(sv[i].sch==b) sv[i].sum+=sum;
        }
        sort(sv+1,sv+1+num);
        cout<<sv[1].sch;
        return 0;
    }
    int sb=Main();
    int main(int argc,char *argv[]) {;}
  • 相关阅读:
    CoreOS 手动更新
    阿里云ECS安装 CoreOS
    CoreOS 手动升级篇
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    Microsoft.NETCore.App 版本不一致导致的运行失败
    设计模式之观察者模式
    设计模式之策略模式
    树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
    设计模式之组合模式
    设计模式之外观模式
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7694595.html
Copyright © 2020-2023  润新知