• ZOJ


    题目链接

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705

    题意

    给出N个队员 然后一个教练要从中选择 M名队员 要选最优的M名

    然后根据这么来判断

    IF做过的题目是属于 MaoMao Selection 那么 pts + 2.5
    else IF属于 Old Surgeon Contest pts + 1.5
    else IF 题目序号是素数 pts + 1
    else pts + 0.3

    IF 参赛的队伍获得一等奖 pts + 36
    else IF 获得二等奖 pts + 27
    else IF 获得三等奖 pts + 18
    else pts + 0

    参加 JapanJam 类的比赛 (计算rating)

    用第三高的 rating 作为 r

    Pts = max(0, (r - 1200) / 100) * 1.5

    计算这个式子 算得 要加的 pts

    最后 如果这名队员是女生 pts + 33

    输入:
    先输入T 表示 T组数据
    输入 N M 表示 N名队员 选 M个
    输入 R 再有R个题目 序号 表示 这R个题目是 MaoMao Selection
    输入 S 再有S个题目序号 表示 这 S个题目是 Old Surgeon Contest
    输入 Q
    接下来 Q 行
    每行三个参数 string int
    分别代表 队伍名称 获得的奖项序号

    接下来 N 行
    参数 string string char int int
    表示 队员名称 所属的队伍名称 性别 所做的题目数量 和 参加的 japan 比赛次数
    然后会列出 题目序号 以及 每次参加 japan 所获得的 rating

    思路

    大概 题意讲清,,就能 A了吧

    对了 如果 rating 个数 不足三个 那么 pts + 0

    AC代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<vector>
    #include<map>
    #include<set>
    #include<string>
    #include<list>
    #include<stack>
    #include <queue>
    
    #define CLR(a, b) memset(a, (b), sizeof(a))
    
    using namespace std;
    typedef long long ll;
    typedef pair <int, int> pii;
    const int INF = 0x3f3f3f3f;
    const int maxn = 1e2 + 5;
    const int MOD = 1e9;
    
    bool isprime(int x)
    {
        int m = sqrt(x) + 1;
        for (int i = 2; i <= m; i++)
            if (x % i == 0)
                return false;
        return true;
    }
    struct node
    {
        string name;
        double score;
    };
    
    bool comp(int x, int y)
    {
        return x > y;
    }
    
    bool cmp(node x, node y)
    {
        if (x.name == y.name)
            return x.name < y.name;
        return x.score > y.score;
    }
    
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            map <int, int> mao, old;
            int n, m;
            scanf("%d%d", &n, &m);
            int k;
            scanf("%d", &k);
            int num;
            for (int i = 0; i < k; i++)
            {
                scanf("%d", &num);
                mao[num] = 1;
            }
            scanf("%d", &k);
            for (int i = 0; i < k; i++)
            {
                scanf("%d", &num);
                old[num] = 1;
            }
            map <string, int> prize;
            scanf("%d", &k);
            string s;
            for (int i = 0; i < k; i++)
            {
                cin >> s;
                scanf("%d", &num);
                if (num == 1)
                    prize[s] = 36;
                else if (num == 2)
                    prize[s] = 27;
                else if (num == 3)
                    prize[s] = 18;
                else if (num == 0)
                    prize[s] = 0;
            }
            vector <node> ans;
            char c;
            for (int i = 0; i < n; i++)
            {
                node u;
                u.score = 0.0;
                cin >> u.name;
                cin >> s;
                u.score += prize[s];
                scanf(" %c", &c);
                if (c == 'F')
                    u.score += 33;
                int v, w;
                scanf("%d%d", &v, &w);
                for (int i = 0; i < v; i++)
                {
                    scanf("%d", &num);
                    if (mao[num])
                        u.score += 2.5;
                    else if (old[num])
                        u.score += 1.5;
                    else if (isprime(num))
                        u.score += 1;
                    else
                        u.score += 0.3;
                }
                vector <int> rat;
                for (int i = 0; i < w; i++)
                {
                    scanf("%d", &num);
                    rat.push_back(num);
                }
                if (rat.size() >= 3 )
                {
                    sort(rat.begin(), rat.end(), comp);
                    u.score += (0, (rat[2] - 1200) * 1.0 / 100) * 1.5;
                }
                ans.push_back(u);
            }
            sort(ans.begin(), ans.end(), cmp);
            for (int i = 0; i < m; i++)
            {
                cout << ans[i].name;
                printf(" %.3lf
    ", ans[i].score);
            }
        }
    }
  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433103.html
Copyright © 2020-2023  润新知