zoukankan      html  css  js  c++  java
  • 问题 H: 象棋对局胜负

    题目描述
    快码佳编四兄弟姐妹在丁总那已经呆了近一个月了。
    最近丁总给四兄弟姐妹出了个难题,希望他们帮助丁总的公司选拔出一批优秀的人才担任重要的职位。当然这些职位对智商的要求各自不同。为了让更多高智商的到合适的位置,他们需要按智商高低排个序。但智商不好测,最终大家一致决定通过象棋比赛来分辨。
    象棋比赛计分规则如下:
    (1)每局对弈双方,胜者得3分,负者得0分,如果平局各得1分。
    (2)每个棋手最终得分为每局得分和。
    (3)每个棋手对弈过的所有对手最终得分的和为该棋手的对手分。比如A只跟B和C下过,最好得分为A:0分,B:5分,c:5分,那么A的对手分为10分
    排名规则如下:
    (1)按照每个棋手最终得分,得分高的排在前
    (2)如果有棋手得分相同,那么比较对手分,对手分高的排名靠前
    (3)如果得分与对手分都相同,那么序号小的排名靠前
    这样保证每个棋手排名不会相同。

    输入
    第一行输入1个整数m,总共有m人参加(10 <= m <= 100)
    然后是m行,分别为第1到m号棋手的总分,对手分
    然后是一个整数k,表示需要挑选出前K个排名靠前的人

    输出
    按照排名从高到低输出K行,每行为编号,得分,对手分,排名,中间用一个空格隔开

    样例输入
    4
    3 5
    1 7
    1 1
    5 7
    2

    样例输出
    4 5 7 1
    1 3 5 2

    题意:根据总分,对手分,序号排序.
    水题,用sort+comp或者重载运算符
    #include <bits/stdc++.h>
    using namespace std;
    const int N=200;
    struct grade{
        int a,b,node;
    }a[N];
    bool comp(grade a,grade b){
        if(a.a!=b.a) return a.a>b.a;
        if(a.b!=b.b) return a.b>b.b;
        return a.node<b.node;
    }
    int main(){
         //ios::sync_with_stdio(false);
         //cout<<"asf"<<endl;
         int n;
         cin>>n;
         for(int i=1;i<=n;i++){
            cin>>a[i].a>>a[i].b;
            a[i].node=i;
         }
         sort(a+1,a+1+n,comp);
        int k;
        cin>>k;
        for(int i=1;i<=k;i++){
            printf("%d %d %d %d
    ",a[i].node,a[i].a,a[i].b,i);
        }
         return 0;
    }
    
  • 相关阅读:
    2018.5.5-6 GDCPC2018广东省赛 6/10 Rank12 Au
    网络流24题总结
    BZOJ4259 残缺的字符串 FFT
    [转]CodePlus 2018 3月赛 博弈论与概率统计
    Aiiage Camp Day6 J Sort
    Daily Scrum7
    Daily Scrum6
    Daily Scrum5
    Daily Scrum4
    Daily Scrum3
  • 原文地址:https://www.cnblogs.com/-yjun/p/10586527.html
Copyright © 2011-2022 走看看