zoukankan      html  css  js  c++  java
  • ZOJ 3705 Applications

    点我看题目

    题意 : 真是一道又臭又长的模拟题啊,不过比赛的时候没看,赛完了补的。

    给你N个候选人,让你从中选M个候选人,根据四个大规则来确定每个人的分数,然后选分数前M个人的输出。

    1、在MOJ上做过题的根据以下规则来计算加分:

    • 如果题目是MAOMAO中的,做对一道加2.5分
    • 如果题目是Old Surgeon Contest中的做对一个加1.5分,当然在MAOMAO中没有与Old Surgeon Contest中相同的题
    • 如果不是两个中的题,但是题号是素数的做对一道加1分
    • 如果不是上边三种情况中的任何一种,做对一道加0.3分。

    2、 Marjar学校每年都会举办比赛,如果申请人中有得了奖的,一等奖加36分,二等奖加27分,三等奖加18分,否则加0分。

    3、还有在别的OJ上做比赛的,会根据他们做的情况进行加分,如果在那些OJ上做的比赛超过三场的,取第三高的分数进行运算,pts =  max(0, (r - 1200) / 100) * 1.5,r 即第三高的分数,然后将pts加入到最后的得分中。

    4、如果申请人是女生再多加上33分。

    思路 :题意已经说的差不多了,接下来就可以模拟了。注意好细节就可以了。

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <stdlib.h>
    #include <algorithm>
    #include <string>
    #include <map>
    
    using namespace std ;
    
    struct node
    {
        string name ;
        double score ;
        bool operator<(node a)const{
        if(score == a.score)
        return name < a.name ;
        return score > a.score ;
        }
    }pt[12400] ;
    
    map<string,int>mapp ;
    int Mao[12400] , OSC[12400] ,ss[12400];
    
    int isprime(int n)
    {
        for(int i = 2 ; i*i <= n ; i++)
        if(n%i == 0)
        return 0 ;
        return 1 ;
    }
    int main()
    {
        int T,N,M,R,S,m,Q,n ;
        scanf("%d",&T) ;
        char nam[35] ;
        while(T--)
        {
            memset(Mao,0,sizeof(Mao)) ;
            memset(OSC,0,sizeof(OSC)) ;
            memset(ss,0,sizeof(ss)) ;
            mapp.clear() ;
            scanf("%d %d",&N,&M) ;
            scanf("%d",&R) ;
            for(int i = 0 ; i < R ; i++){scanf("%d",&m) ;Mao[m] = 1 ;}
            scanf("%d",&S) ;
            for(int i = 0 ; i < S ; i++){scanf("%d",&m) ; OSC[m] = 1 ;}
            scanf("%d",&Q) ;
            for(int i = 0 ; i < Q ; i++)
            {
                scanf("%s %d",nam,&m) ;
                if(m == 1) mapp[nam] += 36 ;
                else if(m == 2) mapp[nam] += 27 ;
                else if(m == 3) mapp[nam] += 18 ;
                else mapp[nam] += 0 ;
            }
            char sex ;
            for(int i = 0 ; i < N ; i++)
            {
                cin >> pt[i].name>>nam>>sex>>m>>n ;
                if(sex == 'M')
                pt[i].score = 0 ;
                else pt[i].score = 33 ;
                pt[i].score += mapp[nam] ;
                int id ;
                for(int j = 0 ; j < m ; j++)
                {
                    scanf("%d",&id) ;
                    if(Mao[id]) pt[i].score += 2.5 ;
                    else if(OSC[id]) pt[i].score += 1.5 ;
                    else if(isprime(id)) pt[i].score += 1 ;
                    else pt[i].score += 0.3 ;
                }
                for(int j = 0 ; j < n ; j++) scanf("%d",&ss[j]) ;
                if(n >= 3)
                {
                    sort(ss,ss+n) ;
                    pt[i].score += max(0.0, (ss[n-3] - 1200) / 100.0) * 1.5 ;
                }
            }
            sort(pt,pt+N) ;
            for(int i = 0 ; i < M ; i++)
            {
                cout<<pt[i].name ;
                printf(" %.3f
    ",pt[i].score) ;
            }
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    C#之集合常用扩展方法与Linq
    PHP核心之MVC设计模式
    Javascript高级之变量
    Javascript高级之console调试
    Javascript高级之概述
    MySQL数据库之PDO扩展
    MySQL数据库之MySQL扩展
    MySQL数据库之数据库备份与还原
    MySQL数据库之预处理
    MySQL数据库之函数
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3588489.html
Copyright © 2011-2022 走看看