本文共 4058 字,大约阅读时间需要 13 分钟。
**CSU1507 超大型LED显示屏_模拟题** Time Limit: 1 Sec Memory Limit: 128 MB Submit: 39 Solved: 14
Description
Input
输入包含不超过100组数据。每组数据第一行为”START hh:mm:ss”,表示比赛开始时刻为hh:mm:ss。最后一行为”END hh:mm:ss”,即比赛结束时刻。 二者之间至少会有一个SCORE信息,格式为”SCORE hh:mm:ss team score”,其中team要么是”home”(主场)要么是”guest”(客场), score表示得分,为1,2或者3。 这些信息保证按照时间从早到晚的顺序排列,且任意两条SCORE信息的时刻均不相同。比赛开始时间不会早于9:00,结束时间不会晚于同一天的21:00。 注意,如果比赛开始时间为09:00:00,结束时间为09:00:01,比赛长度为1秒钟,而不是2秒钟。Output
对于每组数据,输出测试点编号和总耗电量。Sample Input
START 09:00:00
SCORE 09:01:05 home 2 SCORE 09:10:07 guest 3 END 09:15:00 START 09:00:00 SCORE 10:00:00 home 1 SCORE 11:00:00 home 1 SCORE 12:00:00 home 1 SCORE 13:00:00 home 1 SCORE 14:00:00 home 1 SCORE 15:00:00 home 1 SCORE 16:00:00 home 1 SCORE 17:00:00 home 1 SCORE 18:00:00 home 1 SCORE 19:00:00 home 1 SCORE 20:00:00 home 1 END 21:00:00
Sample Output
Case 1: 9672
Case 2: 478800
AC代码
思路很清晰,写的有点多//模拟题,每次读一行,分别计算时间和耗电量#includeint Isstart(char c[]) //START{ if(c[1] == 'T' && c[2] == 'A') return 1; else return 0;}int Isend(char c[]) //END{ if(c[0] == 'E' && c[1] == 'N') return 1; else return 0;}int Countss(char c[]) //以秒计算时间{ int h, m, s; if(c[0] == 'S') { h = 3600 * (10 * (c[6] - '0') + (c[7] - '0')); m = 60 * (10 * (c[9] - '0') + (c[10] - '0')); s = 10 * (c[12] - '0') + (c[13] - '0'); } else if(c[0] == 'E') { h = 3600 * (10 * (c[4] - '0') + (c[5] - '0')); m = 60 * (10 * (c[7] - '0') + (c[8] - '0')); s = 10 * (c[10] - '0') + (c[11] - '0'); } return h + m + s;}int horg(char c[]) //home or guest{ if(c[15] == 'h') return 1; else return 0;}int Countscore(int initial, char c[]) //home or guest的得分{ if(horg(c)) return initial + (c[20] - '0'); else return initial + (c[21] - '0');}//计算当前home或者guest耗电量,home得分guest耗电量不变,guest得分home耗电量不变int Countccc(int homeguest, char c[], int le[]){ int hgc; if(homeguest <= 9) //个位数 { for(int i= 0; i < 10; i++) if(homeguest == i) { hgc = le[i]; break; } } else if(homeguest >= 10 && homeguest <= 99) //两位数 { int shang = homeguest / 10; int yushu = homeguest % 10; hgc = 0; for(int i = 0; i < 10; i++) { if(shang == i) hgc += le[i]; if(yushu == i) hgc += le[i]; } } else if(homeguest >= 100 && homeguest <= 999) //三位数 { int shan = homeguest / 100; int shiw = homeguest / 10 % 10; int gew = homeguest % 10; hgc = 0; for(int i = 0; i < 10; i++) { if(shan == i) hgc += le[i]; if(shiw == i) hgc += le[i]; if(gew == i) hgc += le[i]; } } return hgc;}int main(){ int led[11] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; //对应的耗电量 char s[30]; int caseout = 0; //编号 int charge = 0; //统计最终耗电量 while(gets(s)) { int time1, time2; int homec, guestc, homesco, guestsco; if(Isstart(s)) //START { time1 = Countss(s); homesco = 0; guestsco = 0; homec = 6; guestc = 6; } else if(Isend(s)) //END { caseout++; time2 = Countss(s); charge += (time2 - time1) * (homec + guestc); printf("Case %d: %d\n", caseout, charge); charge = 0; //// } else //SCORE { time2 = Countss(s); charge += (time2 - time1) * (homec + guestc); time1 = time2; //// if(horg(s)) //home得分, guest不变 { homesco = Countscore(homesco, s); //当前得分 homec = Countccc(homesco, s, led); } else //guest得分, home不变 { guestsco = Countscore(guestsco, s); guestc = Countccc(guestsco, s, led); } } } return 0;}