CSP認證訓練題目——hdu6023-Automatic Judge
阿新 • • 發佈:2019-01-10
這是道水題,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;
}