csp 小明放學(C 的坑)

2021-09-12 12:18:56 字數 2735 閱讀 5628

題目背景

漢東省政法大學附屬中學所在的光明區最近實施了名為「智慧型光明」的智慧型城市專案。具體到交通領域,通過「智慧型光明」終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了「智慧型光明」終端,小明想利用這個終端給出的資訊,估算自己放學回到家的時間。

問題描述

一次放學的時候,小明已經規劃好了自己回家的路線,並且能夠**經過各個路段的時間。同時,小明通過學校裡安裝的「智慧型光明」終端,看到了出發時刻路上經過的所有紅綠燈的指示狀態。請幫忙計算小明此次回家所需要的時間。

輸入格式

輸入的第一行包含空格分隔的三個正整數 r、y、g,表示紅綠燈的設定。這三個數均不超過10^6

輸入的第二行包含乙個正整數 n,表示小明總共經過的道路段數和路過的紅綠燈數目。

接下來的 n 行,每行包含空格分隔的兩個整數 k、t。k=0 表示經過了一段道路,將會耗時 t 秒,此處 t 不超過10^6;k=1、2、3 時,分別表示出發時刻,此處的紅綠燈狀態是紅燈、黃燈、綠燈,且倒計時顯示牌上顯示的數字是 t,此處 t 分別不會超過 r、y、g。

輸出格式

輸出乙個數字,表示此次小明放學回家所用的時間。

樣例輸入

30 3 30

80 10

1 50 11

2 20 6

0 33 10

0 3樣例輸出

46樣例說明

小明先經過第一段路,用時 10 秒。第一盞紅綠燈出發時是紅燈,還剩 5 秒;小明到達路口時,這個紅綠燈已經變為綠燈,不用等待直接通過。接下來經過第二段路,用時 11 秒。第二盞紅綠燈出發時是黃燈,還剩兩秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩 11 秒。接下來經過第

三、第四段路,用時 9 秒。第三盞紅綠燈出發時是綠燈,還剩 10 秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩兩秒。接下來經過最後一段路,用時 3 秒。共計 10+11+11+9+2+3 = 46 秒。

評測用例規模與約定

有些測試點具有特殊的性質:

* 前 2 個測試點中不存在任何訊號燈。

測試點的輸入資料規模:

* 前 6 個測試點保證n ≤ 10^3

* 所有測試點保證n ≤ 10^5

思路:題意為給出小明出發時看到的各個路口的紅綠燈的顏色和通過每條道路的時間,求其回家總共用的時間。這題只需要簡單模擬即可,在第一題的基礎上只需要寫出當小明經過now秒後,到達某個路口時,現在紅綠燈的顏色是什麼?以及還剩多少秒?

這題的坑有兩個,首先資料量很大,如果用int只能得60分(不知道為什麼考試得了40分。。。),一共通過n個路口,n ≤ 10^5,並且紅綠燈的持續時間 r、y、g,這三個數均不超過10^6。想象極端情況10^5個用例全部需要等待10 ^6次方秒那麼總共需要的時間sum數量級為10 ^11(int_max=2147483647, 10^10量級),所以為了保險起見,直接用ide的替換功能把int替換成long long。其次總共需要的時間sum數量巨大,紅綠燈在這個時間內經歷了很多輪的變化,一輪指的是經歷過紅綠黃三種顏色的燈,紅綠燈是迴圈的,經過紅綠黃一輪的時間後,紅綠燈的顏色還是當前的顏色,剩餘的時間減去了一輪經過的時間,所以在求紅綠燈狀態時,先把現在的時間sum = sum%(r+g+y)。如果不這樣的話會超時,我的程式只得了70分。

改過上面的兩個地方最後得到了100分,所以這題的教訓是要注意資料的規模,仔細想想規律

#include

"iostream"

#include

"climits"

using namespace std;

long

long r, y, g;

long

long n;

long

long

time1

(long

long light,

long

long time)

long

long

get_next_light

(long

long light)

long

long

get_next_time

(long

long light)

long

long

get_time

(long

long light,

long

long time,

long

long now)

if(now==0)

while

(now>0)

else

}return

time1

(light, time);}

intmain()

cout << sum << endl;

//system("pause");

return0;

}

csp試題2 小明放學

題目背景 漢東省政法大學附屬中學所在的光明區最近實施了名為 智慧型光明 的智慧型城市專案。具體到交通領域,通過 智慧型光明 終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了 智慧型光明 終端,小明想利用這個終端給出的資訊,估算自己放學回到家的時間。問題描述 一次放學的時候,小明已經規...

CSP小明放學 好題)

小明放學 時間限制 1.0s 記憶體限制 512.0mb 問題描述 題目背景 漢東省政法大學附屬中學所在的光明區最近實施了名為 智慧型光明 的智慧型城市專案。具體到交通領域,通過 智慧型光明 終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了 智慧型光明 終端,小明想利用這個終端給出的...

CSP 201812 2 小明放學

問題描述 解題思路 由於資料的量較大,需要使用long long來儲存結果,否則會爆掉結果只能得到一部分的分 可以模擬時鐘,將紅綠燈的變換當成時鐘的運轉,這樣用模運算來斷定紅綠燈在到達時處於什麼顏色 注意看前一題上學,我做的時候沒看,導致以為黃燈能直接走,卡了很久 實現 1 include2 3us...