UVA12822 Extraordinarily large LED题目描述Link: https://uva.onlinejudge.org/index.php?optioncom_onlinejudgeItemid8category861pageshow_problemproblem4687PDF输入格式输出格式输入输出样例 #1输入 #1START 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输出 #1Case 1: 9672 Case 2: 478800Solution1. 题意篮球比赛中主队和客队的比分分别使用三位七段数码管表示显示时不带前导零。七段数码管的某一段如果亮起则每秒钟会消耗1 11个单位的电能也即每一段的功率为1 11。本题单测试点多组数据每组数据中会先输入比赛开始的事件随后输入若干条表示队伍得分的信息包含一个用时分秒格式表示的时间戳、字符串home/guest \texttt{home/guest}home/guest表示主队或者客队得分以及一个数字只可为1 , 2 , 3 1,2,31,2,3表示罚球投进、两分球和三分球最后输入比赛结束的时刻。要求对每一组数据求出整场比赛结束时表示比分的数码管总共消耗了多少电力。2. 分析这是一个非常典型的模拟问题难度不大。2.1 七段数码管注意到七段数码管显示数字0 ∼ 9 0\sim90∼9时分别会有 $6, 2, 5, 5, 4, 5, 6, 3, 7, 6 $ 段点亮由此即可定义一个函数power(int score)表示某时刻比分为score时数码管的消耗功率。constlonglongpower_vs_digit[10]{6,2,5,5,4,5,6,3,7,6};inlinelonglongpower(longlongscore){if(score100)returnpower_vs_digit[score/100]power_vs_digit[(score%100)/10]power_vs_digit[score%10];elseif(10scoreandscore99)returnpower_vs_digit[score/10]power_vs_digit[score%10];elsereturnpower_vs_digit[score];}2.2 时刻由于时刻按照hh:mm:ss的格式给出因此直接将其转化为“一天当中的第几秒”即可将该值赋值给一个主时间戳。inlinelonglongtime_val(string timestamp){return(longlong)timestamp[6]*10timestamp[7]-528(timestamp[3]*10timestamp[4]-528)*60(timestamp[0]*10timestamp[1]-528)*3600;}2.3 得分与模拟由题比赛过程中某时刻数码管显示比分时的消耗功率可以利用上面提到的power函数求得。当出现了一个得分的事件后需要将得分的时刻存为一个临时时间戳用临时时间戳减去主时间戳用差值对应的时间长度乘以两队比分对应的功率即为这段时间的总耗电量计入累计用电量将临时时间戳赋值给主时间戳更新主时间戳的值。最后更新比分。2.4 判断输入结束用cin.eof()判断即可。3. 代码#includeiostream#includestringusingnamespacestd;constlonglongpower_vs_digit[10]{6,2,5,5,4,5,6,3,7,6};inlinelonglongpower(longlongscore){if(score100)returnpower_vs_digit[score/100]power_vs_digit[(score%100)/10]power_vs_digit[score%10];elseif(10scoreandscore99)returnpower_vs_digit[score/10]power_vs_digit[score%10];elsereturnpower_vs_digit[score];}inlinelonglongtime_val(string timestamp){return(longlong)timestamp[6]*10timestamp[7]-528(timestamp[3]*10timestamp[4]-528)*60(timestamp[0]*10timestamp[1]-528)*3600;}voidsolve(void){staticintkase1;longlonghome0,guest0,match_time0,tot0;string event,timestamp,team,point;while(1){if(cin.eof())exit(0);if(cineventtimestamp);if(eventSTART)match_timetime_val(timestamp);elseif(eventSCORE){cinteampoint;inttmptime_val(timestamp);tot(power(home)power(guest))*(tmp-match_time);match_timetmp;team[0]h?home(longlong)point[0]-48:guest(longlong)point[0]-48;}elseif(eventEND){inttmptime_val(timestamp);tot(power(home)power(guest))*(tmp-match_time);break;}}coutCase kase: totendl;kase1;}intmain(){while(1)solve();}
UVA12822 Extraordinarily large LED 题解
发布时间:2026/5/22 22:59:25
UVA12822 Extraordinarily large LED题目描述Link: https://uva.onlinejudge.org/index.php?optioncom_onlinejudgeItemid8category861pageshow_problemproblem4687PDF输入格式输出格式输入输出样例 #1输入 #1START 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输出 #1Case 1: 9672 Case 2: 478800Solution1. 题意篮球比赛中主队和客队的比分分别使用三位七段数码管表示显示时不带前导零。七段数码管的某一段如果亮起则每秒钟会消耗1 11个单位的电能也即每一段的功率为1 11。本题单测试点多组数据每组数据中会先输入比赛开始的事件随后输入若干条表示队伍得分的信息包含一个用时分秒格式表示的时间戳、字符串home/guest \texttt{home/guest}home/guest表示主队或者客队得分以及一个数字只可为1 , 2 , 3 1,2,31,2,3表示罚球投进、两分球和三分球最后输入比赛结束的时刻。要求对每一组数据求出整场比赛结束时表示比分的数码管总共消耗了多少电力。2. 分析这是一个非常典型的模拟问题难度不大。2.1 七段数码管注意到七段数码管显示数字0 ∼ 9 0\sim90∼9时分别会有 $6, 2, 5, 5, 4, 5, 6, 3, 7, 6 $ 段点亮由此即可定义一个函数power(int score)表示某时刻比分为score时数码管的消耗功率。constlonglongpower_vs_digit[10]{6,2,5,5,4,5,6,3,7,6};inlinelonglongpower(longlongscore){if(score100)returnpower_vs_digit[score/100]power_vs_digit[(score%100)/10]power_vs_digit[score%10];elseif(10scoreandscore99)returnpower_vs_digit[score/10]power_vs_digit[score%10];elsereturnpower_vs_digit[score];}2.2 时刻由于时刻按照hh:mm:ss的格式给出因此直接将其转化为“一天当中的第几秒”即可将该值赋值给一个主时间戳。inlinelonglongtime_val(string timestamp){return(longlong)timestamp[6]*10timestamp[7]-528(timestamp[3]*10timestamp[4]-528)*60(timestamp[0]*10timestamp[1]-528)*3600;}2.3 得分与模拟由题比赛过程中某时刻数码管显示比分时的消耗功率可以利用上面提到的power函数求得。当出现了一个得分的事件后需要将得分的时刻存为一个临时时间戳用临时时间戳减去主时间戳用差值对应的时间长度乘以两队比分对应的功率即为这段时间的总耗电量计入累计用电量将临时时间戳赋值给主时间戳更新主时间戳的值。最后更新比分。2.4 判断输入结束用cin.eof()判断即可。3. 代码#includeiostream#includestringusingnamespacestd;constlonglongpower_vs_digit[10]{6,2,5,5,4,5,6,3,7,6};inlinelonglongpower(longlongscore){if(score100)returnpower_vs_digit[score/100]power_vs_digit[(score%100)/10]power_vs_digit[score%10];elseif(10scoreandscore99)returnpower_vs_digit[score/10]power_vs_digit[score%10];elsereturnpower_vs_digit[score];}inlinelonglongtime_val(string timestamp){return(longlong)timestamp[6]*10timestamp[7]-528(timestamp[3]*10timestamp[4]-528)*60(timestamp[0]*10timestamp[1]-528)*3600;}voidsolve(void){staticintkase1;longlonghome0,guest0,match_time0,tot0;string event,timestamp,team,point;while(1){if(cin.eof())exit(0);if(cineventtimestamp);if(eventSTART)match_timetime_val(timestamp);elseif(eventSCORE){cinteampoint;inttmptime_val(timestamp);tot(power(home)power(guest))*(tmp-match_time);match_timetmp;team[0]h?home(longlong)point[0]-48:guest(longlong)point[0]-48;}elseif(eventEND){inttmptime_val(timestamp);tot(power(home)power(guest))*(tmp-match_time);break;}}coutCase kase: totendl;kase1;}intmain(){while(1)solve();}