ccf-csp #201812-2 小明放学 (100分 附解析)
生活随笔
收集整理的這篇文章主要介紹了
ccf-csp #201812-2 小明放学 (100分 附解析)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2021.11.26更新,第17行代碼判斷條件修正
2019.12.14更新,坑點(diǎn)加一(最終答案需要用long long存儲(chǔ))
題目鏈接:http://118.190.20.162/view.page?gpid=T81
題目分析
- 算是一道模擬題吧,題目的核心在于求遇到交通的時(shí)刻,交通燈處于什么樣的狀態(tài),以及根據(jù)交通燈的狀態(tài)得出需要等待的時(shí)間。遇到這類(lèi)問(wèn)題,推薦在草稿紙上畫(huà)圖,理清楚思路再碼。
- 我們需要明確,交通燈的狀態(tài)是循環(huán)的,而循環(huán)的周期就是(r+y+g)(r+y+g)(r+y+g),所以求解時(shí)可以將經(jīng)過(guò)的時(shí)間段對(duì)周期取模。
- 根據(jù)交通燈的變化的時(shí)間將分成區(qū)間[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r)[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r)[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r),看取余得到的時(shí)間落在哪個(gè)區(qū)間就可以知道交通燈狀態(tài)了。(注意不要忽略第四個(gè)區(qū)間)
坑點(diǎn):
題目沒(méi)寫(xiě)明什么時(shí)候該走什么時(shí)候該等(吐槽 )
以及最終的答案需要用long long存儲(chǔ)(看題目數(shù)據(jù)范圍的時(shí)候,就應(yīng)該提前分析好用什么類(lèi)型存儲(chǔ)了)
代碼如下
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int maxn = 1e5 + 10; int r, y, g, n, k, t; long long ans; int getTime(int type, int t, int total) {//根據(jù)交通燈的初始狀態(tài)進(jìn)行分類(lèi)討論if (type == 1) {t = total - t;//根據(jù)最后時(shí)間段落在哪個(gè)區(qū)間進(jìn)行分類(lèi)討論if (t < 0) return -t; //最終為紅燈else if (t < g) return 0; //最終為綠燈else return t < (g + y) ? (y - (t - g)) + r : (r + g + y - t); //最終為黃燈或紅燈} else if (type == 2) {t = total - t;if (t < 0) return r - t;else if (t < r) return r - t;else return t < (r + g) ? 0 : (r + g + y - t) + r;} else if (type == 3) {t = total - t;if (t < 0) return 0;else if (t < y) return y - t + r;else return t < (y + r) ? r - (t - y) : 0;} else {return t;} }int main() { // freopen("1.in", "r" ,stdin);scanf("%d%d%d", &r, &y, &g);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d%d", &k, &t);ans += getTime(k, t, ans % (r + y + g));}printf("%lld\n", ans);return 0; }最后再附上一組幫我找到bug的數(shù)據(jù):
input: 30 3 30 8 0 50 1 20 0 11 2 2 0 50 0 25 3 10 0 3outpu: 173總結(jié)
以上是生活随笔為你收集整理的ccf-csp #201812-2 小明放学 (100分 附解析)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ccf-csp #201909-1 小明
- 下一篇: 解决Java Web项目无法读取配置文件