1. 程式人生 > >HDU 2093 考試排名 【排序】【模擬】

HDU 2093 考試排名 【排序】【模擬】

考試排名

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 14928    Accepted Submission(s): 5220


Problem DescriptionC++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?
我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上了一個臺階,但是在耗時上要攤上你共花去的時間。特別是,曾經有過的錯誤提交,每次都要攤上一定的單位時間分。這樣一來,你在做出的題數上,可能領先別人很多,但是,在做出同樣題數的人群中,你可能會在耗時上處於排名的劣勢。
例如:某次考試一共8題(A,B,C,D,E,F,G,H),每個人做的題都在對應的題號下有個數量標記,負數表示該學生在該題上有過的錯誤提交次數,但到現在還沒有AC,正數表示AC所耗的時間,如果正數a跟上一對括號,裡面有個整數b,那就表示該學生提交該題AC了,耗去了時間a,同時,曾經錯誤提交了b次,因此對於下述輸入資料:



若每次錯誤提交的罰分為20分,則其排名從高到低應該是這樣的:
Josephus 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0

Input輸入資料的第一行是考試題數n(1≤n≤12)以及單位罰分數m(10≤m≤20),每行資料描述一個學生的使用者名稱(不多於10個字元的字串)以及對所有n道題的答題現狀,其描述採用問題描述中的數量標記的格式,見上面的表格,提交次數總是小於100,AC所耗時間總是小於1000。


Output將這些學生的考試現狀,輸出一個實時排名。實時排名顯然先按AC題數的多少排,多的在前,再按時間分的多少排,少的在前,如果湊巧前兩者都相等,則按名字的字典序排,小的在前。每個學生佔一行,輸出名字(10個字元寬),做出的題數(2個字元寬,右對齊)和時間分(4個字元寬,右對齊)。名字、題數和時間分相互之間有一個空格。

Sample Input8 20 Smith -1 -16 8 0 0 120 39 0 John 116 -2 11 0 0 82 55(1) 0 Josephus 72(3) 126 10 -3 0 47 21(2) -2 Bush 0 -1 -8 0 0 0 0 0 Alice -2 67(2) 13 -1 0 133 79(1) -1 Bob 0 0 57(5) 0 0 168 -7 0
Sample OutputJosephus 5 376 John 4 284 Alice 4 352 Smith 3 167 Bob 2 325 Bush 0 0
Authorqianneng
Source
Recommendlcy

   比賽的時候這題WA了無數次。這題坑就坑在人數的控制。沒錯,這題的人數是不確定的(我還讀題找了半天QAQ)。輸入多組人名。

除去這個的話,這題就是對字串的處理比較麻煩。其他倒沒什麼了。

上程式碼:;

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

#define MM(a) memset(a,0,sizeof(a));

struct pep
{
    char name[15];
    int acnum;
    int score;
} stu[1000];

bool cmp(pep a,pep b)
{

    if(a.acnum==b.acnum)
    {
        if(a.score==b.score)
        {
            return strcmp(a.name,b.name)<0;
        }
        else
        {
            return a.score<b.score;
        }
    }
    else
    {
        return a.acnum>b.acnum;
    }

}

int main()
{
    int n,m;
    MM(stu);
    scanf("%d %d",&n,&m);
    getchar();

    int id=0;
    while(~scanf("%s",stu[id].name))///QAQ 坑了我半天的地方。按兩次Ctrl+z 再回車就能結束輸入
    {
        char ques[100];
        int temp,wrong;
        stu[id].acnum=0;
        stu[id].score=0;

        for(int j=0; j<n; j++)
        {
            scanf("%s",ques);

            if(ques[0]!='-'&&ques[0]!='0')///說明這題做出來了
            {

                stu[id].acnum++;

                int len=strlen(ques);
                wrong=0;
                temp=0;

                for(int i=0; i<len; i++)
                {
                    if(ques[i]=='(')///如果發現做錯的
                    {
                        for(int k=i+1; k<len-1; k++)///計算做錯的次數
                        {
                            wrong=wrong*10+ques[k]-'0';
                        }

                        break;
                    }
                    temp=temp*10+ques[i]-'0';///計算這題耗費的時間
                }
                temp+=wrong*m;
                stu[id].score+=temp;
            }

        }
        id++;
    }
    sort(stu,stu+id,cmp);

    for(int i=0;i<id;i++)
    {
        printf("%-10s %2d %4d\n",stu[i].name,stu[i].acnum,stu[i].score);
    }
    return 0;
}


這題的另外一個收穫就是左對齊與右對齊輸出

左對齊 : %-2d %-3d %-10s ///數字控制長度
右對齊 : %2d  %3d  %10s


相關推薦

HDU 2093 考試排名 排序模擬

考試排名Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14928    Accepted Submission(s

HDU 2093 考試排名結構體排序

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍

HDU 2093考試排名(結構體多關鍵字排序+字串處理)

題目 Description C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一

hdu 2093 考試排名(結構體排序)

對“到檔案結束”理解 程式碼: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { char nam

HDU 2093 考試排名 (結構體+排序+簡單但麻煩)

考試排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi

題解報告:hdu 2093 考試排名

初始 c++ 讀取 實時 相互 計算 入參 spa 排序規則 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++編程考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功

HDU 2093 考試排名

說明:這個就是一個簡單的資料處理的題目,建議用STL #include <stdio.h> #include <algorithm> #include <string.h> using namespace std;

HDU 2093考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上

hdu 2093 考試排名(sscanf)

模擬題。 直接從教程里拉解析。 因為表格裡的資料格式不統一。有時候有"()",有時候又沒有。而它也不會給我們提示。 這種情況下,就只能它它們統一看作字串來處理了。現在就請出我們的主角sscanf()! sscanf 語法: #include int sscanf( con

HDU 2093 (考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍

hdu---2093考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上了

HDU 杭電 acm-2093-考試排名

/************************************************************************ 這題廢了一番功夫。。 首先題目沒給出人數,乍一看懵了。參考了網上的程式碼,用 while(scanf("%s",name)!

openjudge字符串+模擬1777:文件結構“圖”

不用 第一個 LG cstring \n 函數 算法分析 參數 i++ 【題目傳送門:】戳 【描述:】 在計算機上看到文件系統的結構通常很有用。Microsoft Windows上面的"explorer"程序就是這樣的一個例子。但是在有圖形界面之前,沒有圖形化的表示方法的,

CF A.Mishka and Contest雙指針/模擬

tdi pac long 消失 clu cin fix OS code 【鏈接】:CF/4892 【題意】: 一個人解決n個問題,這個問題的值比k小, 每次只能解決最左邊的或者最右邊的問題 解決了就消失了。問這個人能解決多少個問題。 【代碼】: #include<bi

洛谷P1160——佇列安排連結串列,模擬

一個學校里老師要將班上NN個同學排成一列,同學被編號為$1~N$,他採取如下的方法: 先將11號同學安排進佇列,這時佇列中只有他一個人; 2-N2−N號同學依次入列,編號為i的同學入列方式為:老師指定編號為i的同學站在編號為1-(i -1)1−(i−1)中某位同學(即之前已經入

迷說引流指令碼/迷說引流指令碼-黑貓雷電模擬

【使用步驟】 第一步:下載夜神模擬器 版本 6.0.0.0 第二步:安裝引流指令碼+app 預設會打包在資料夾內 下載後解壓可以看到 第三步:設定夜神模擬器:自定義解析度 寬:480 高:800 DPI:160 第三步:設定夜神模擬器:自定義解析度 寬:

占卜DIY雙端佇列+模擬

題目描述 lyd學會了使用撲克DIY占卜。方法如下:一副去掉大小王的撲克共52張,打亂後均分為13堆,編號1~13,每堆4張,其中第13堆稱作“生命牌”,也就是說你有4條命。這裡邊,4張K被稱作死神。 初始狀態下,所有的牌背面朝上扣下。 流程如下: 1.抽取生命

NOI省選模擬小奇的花園

1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<algorithm> 6 #i

POJ3121 HDU1968 UVA12096 UVALive3634 The SetStack Computerset+vector+map+模擬

Background from Wikipedia: "Set theory is a branch of mathematics created principally by the German mathematician Georg Cantor at the end of the 19th centu

清華集訓2017模擬Catalan

Description 求Cnmod3814697265625(518)其中Cn為卡特蘭數第n項 n<=10^18,T<=10 Solution 這麼大的組合數取模啊。。。。以前真沒見過 首先我們知道Ans=Cn2nn+1 根據套路我們只