2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) I

链接:http://codeforces.com/gym/101116

题意:选六个数,必须出现次数最多,且数字最小,如果出现7优先加入7

解法:排序,出现7优先加入7,最后再将6个数排序

#include<bits/stdc++.h>
using namespace std;
struct P
{
    int num,pos,M;
}He[1000];
bool cmd(P a,P b)
{
    if(a.pos==b.pos)
    {
        return a.M<b.M;
    }
    else
    {
        return a.pos>b.pos;
    }
}
int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
       cin>>n;
        for(int i=0; i<51; i++)
        {
            if(i!=7)
            {
                He[i].num=i;
                He[i].pos=0;
                He[i].M=i;
            }
            else
            {
                He[i].num=i;
                He[i].pos=0;
                He[i].M=0;
            }
        }
        while(n--)
        {
            int a;
            for(int i=0;i<6;i++)
            {
                cin>>a;
                He[a].pos++;
            }
        }
        int num[10];
        sort(He,He+51,cmd);
        for(int i=0;i<6;i++)
        {
            num[i]=He[i].num;
        }
        sort(num,num+6);
        for(int i=0;i<6;i++)
        {
            cout<<num[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/yinghualuowu/p/6049383.html