1. 程式人生 > >CSP認證訓練題目——hdu6023-Automatic Judge

CSP認證訓練題目——hdu6023-Automatic Judge

這是道水題,AC這道題目是很容易的,只要瞭解OJ的評判規則即可,這道題主要就是讓你編寫一段程式,可以計算出選手最終AC了幾道題以及用了多少時間

注意:這裡的用了多少時間並不是說選手做完這些題用了多長時間,它是有具體的規則的,而且做錯還會罰時,下面我就來說一下時間的計算規則

首先,舉例來說,現在有5道題:
1001, 1002, 1003, 1004,1005
對於每道題,提交後有多種可能,我們可以直接將他們分為AC和未AC

  • AC:

    • 當前時間計入總時間
  • 未AC

    • 如果該題之前已經被AC了,那麼可忽略該項,對總時間無影響
    • 如果之前沒AC,那麼該題目就擁有了與其對應的罰時(用一個數組來表示),注意,是該題,如果最後這道題也沒有被AC,那麼這個罰時是不計入總時間的,只有該題目被AC後,它所對應的罰時才會被加入總時間(這是本體最關鍵的一點)

以上就是本題的規則,吐過有什麼不明白,可以看一下下面的程式碼,看完你就明白了,註釋掉的地方不要看,那是我除錯的時候寫的

這道題出的是有點兒問題的,因為n根本就沒用,我開陣列的原則就是:
只要開不崩,就往崩裡開

#include<stdio.h>
#include<string.h>

int vis[100101];
int num[100101];
int time[100101];
char result[100];
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        memset(vis, 0
, sizeof(vis)); memset(num, 0, sizeof(num)); memset(time, 0, sizeof(time)); memset(result, '\0', sizeof(result)); int final_time = 0, _count = 0; int HH = 0, MM = 0; int n = 0, m = 0; scanf("%d%d", &n, &m); int sum; for(int i = 0
; i < m; i++) { memset(result, '\0', sizeof(result)); scanf("%d %d:%d %s", &num[i], &HH, &MM, result); //("咋回事兒?\n"); if(vis[num[i]]) continue; if(result[0] == 'A') { _count++;//統計AC的題目個數 vis[num[i]] = 1; int temp = HH*60 + MM; temp += time[num[i]];//如果最終該題目被AC了,將其所對應的罰時加上 final_time += temp; //("執行了嗎?\n"); } else time[num[i]] += 20;//改題目所對應的罰時 //("為什麼不執行?\n"); // sum = final_time; //("何其樂%d\n", sum); } printf("%d %d\n", _count, final_time); } return 0; }