zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
  • 相关阅读:
    二叉树的前中后序遍历(非递归)
    剑指offer——圆圈中最后剩下的数字
    剑指offer——和为s的连续正整数序列
    leetcode300.最长上升子序列
    将网络描述符设置为非阻塞的场景
    leetcode72.编辑距离
    浅谈各种锁机制
    TCP如何保证可靠传输?
    JavaScript(七)
    JavaScript(六)
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433103.html
Copyright © 2011-2022 走看看