問題描述
試題編號: | 201812-2 |
試題名稱: | 小明放學 |
時間限制: | 1.0s |
內存限制: | 512.0MB |
問題描述: |
題目背景 漢東省政法大學附屬中學所在的光明區最近實施了名爲“智慧光明”的智慧城市項目。具體到交通領域,通過“智慧光明”終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了“智慧光明”終端,小明想利用這個終端給出的信息,估算自己放學回到家的時間。 問題描述 一次放學的時候,小明已經規劃好了自己回家的路線,並且能夠預測經過各個路段的時間。同時,小明通過學校裏安裝的“智慧光明”終端,看到了出發時刻路上經過的所有紅綠燈的指示狀態。請幫忙計算小明此次回家所需要的時間。 輸入格式 輸入的第一行包含空格分隔的三個正整數 r、y、g,表示紅綠燈的設置。這三個數均不超過 106。 輸出格式 輸出一個數字,表示此次小明放學回家所用的時間。 樣例輸入 30 3 30 樣例輸出 46 樣例說明 小明先經過第一段路,用時 10 秒。第一盞紅綠燈出發時是紅燈,還剩 5 秒;小明到達路口時,這個紅綠燈已經變爲綠燈,不用等待直接通過。接下來經過第二段路,用時 11 秒。第二盞紅綠燈出發時是黃燈,還剩兩秒;小明到達路口時,這個紅綠燈已經變爲紅燈,還剩 11 秒。接下來經過第三、第四段路,用時 9 秒。第三盞紅綠燈出發時是綠燈,還剩 10 秒;小明到達路口時,這個紅綠燈已經變爲紅燈,還剩兩秒。接下來經過最後一段路,用時 3 秒。共計 10+11+11+9+2+3 = 46 秒。 評測用例規模與約定 有些測試點具有特殊的性質: |
答題欄
主要的處理就是?t = 2時黃燈的那個直接加到紅燈那邊,另外就是????怎麼說呢。。。= 號要稍微注意下要是時間相等了!不就等於下一個燈的開始了嗎所以啊等於號這邊好愁人啊
#include<bits/stdc++.h>
using namespace std;
int main()
{
int r, y, g;
int n , flag , t;
scanf("%d%d%d",&r,&y,&g);
scanf("%d",&n);
long long sum = 0;
int totaltime = r + y + g;
for(int i = 1; i <= n ; i ++)
{
scanf("%d%d",&flag,&t);
if(flag == 0) //這斷路可以直接通過
{
sum += t;
continue;
}
if(flag == 2)
t += r;//紅燈也要不是嗎?
int m = sum % totaltime; //時間上取mod
if(flag == 3)
{
if(m >= t && m <= t + y + r)
sum += r + y + t - m;
}else //黃燈的已經變成紅燈了一塊處理
{
if(m <= t)
sum += t - m;
if(m >= t + g)
sum += r + y - (m - t - g );
}
}
printf("%lld\n",sum);
return 0;
}