洛谷 P5269 歐穩歐再次學車 題解

2022-05-01 04:09:06 字數 2641 閱讀 7316

請自行腦補一張歐穩歐學車的圖

歐穩歐學車時經常用一輛橡樹車練習。這輛橡樹車共有 \(n\) 個擋位,歐穩歐每秒可以把擋位增加或減少 \(1\),初始時(\(0\) 時刻)擋位為 $ 1$。

這輛車的轉速範圍是 \([l,r]\),初始時轉速為 $ l$。每次公升擋時,轉速會變成 \(l\);降擋時,會變成 \(r\)。歐穩歐在每秒也可以踩油門,讓轉速增加 \(x\),再對 \(r\) 取 \(\text\)。如果轉速連續 \(k\) 秒都 \(=r\),那麼這輛車的發動機會停止工作,在這 \(k\) 秒結束的一瞬間停下(即使 \(k\) 秒中經歷了降檔操作,仍然算這種情況)。

這些操作我們認為都是在每秒開頭的一瞬間進行的,其中換擋操作比踩油門操作先進行。而這一秒內這輛車前進的距離是 轉速\(\times\)擋位。

現在給出歐穩歐練習時的操作序列,你需要求出他一共前進的距離是多少。

第一行六個整數 \(t,n,l,r,x,k\),\(t\) 表示總時間。

接下來 \(t\) 行,每行兩個整數 \(x,y\),表示這一秒的操作。

其中 \(x=0\) 表示公升擋,\(x=1\) 表示降擋,\(x=2\) 表示擋位不變;\(y=0\) 表示不踩油門,\(y=1\) 表示踩油門。(不要問為什麼沒有剎車)

一行乙個整數,表示給定操作序列的前進距離。

如果歐穩歐在擋位為 \(n\) 時公升擋,或在擋位為 \(1\) 時降擋,那麼給定序列不合法,輸出 \(-1\)。

輸入 #1

5 3 1 10 5 100

0 10 0

2 12 1

1 1輸出 #1

輸入 #2

3 1 1 1 1 2

2 02 1

2 0輸出 #2

輸入 #3

1 2 3 4 5 6

1 0輸出 #3

-1對於樣例一:

第一秒擋位為 \(2\),轉速為 \(6\);

第二秒擋位為 \(3\),轉速為 \(1\);

第三秒擋位為 \(3\),轉速為 \(6\);

第四秒擋位為 \(3\),轉速為 \(10\);

第五秒擋位為 \(2\),轉速為 \(10\)。

對於樣例二,前進兩秒之後發動機就停止了工作。

對於 \(30\%\) 的資料,沒有擋位操作(即保證 \(x=2\));

對於另外 \(30\%\) 的資料,沒有踩油門操作(即保證 \(y=0\));

對於全部資料,保證 \(1\le t,n,l,r,x,k\le 10^6,l\le r\)。

模擬其實很簡單的我想複雜了

所以看了很久的題目,擔心寫出鍋

主要原因還是因為這道題是gyh大佬給我推薦的

大佬推薦的當然簡單不了啦

不過沒想到gyh這麼體貼我這個蒟蒻

找適合我這個水平的題目來給我做

開心qwq

(為什麼不開long long 只有10分,這不對)

關於檔位有三個操作,關於速度有兩個操作

公升檔,降檔,不動和加速,不加速

根據給出的資料來模擬就好了

根據提議來模擬就好了

先判斷是公升檔,降檔還是不動

如果是公升檔那就讓檔位增加,速度變為l

如果是降檔那就讓檔位減少,速度變為r

如果是不動那就是不用管了

在判斷是加速還是不加速

加速那就用現在速度加上x之後和r取min

不加速就不用管

還有會不會拋錨這也是乙個問題

只需要開乙個變數儲存已經在r速度上面持續了多久

如果這個時候速度是r那就變數++

不然就要變為0

#include#include#define int long long

using namespace std;

int read()

while(c >= '0' && c <= '9')

return sum * fg;

}signed main()

dang ++;

zhuan = l;//先公升檔

//如果不踩油門,那就只處理公升檔,如果踩油門那就加速

if(y == 1)

zhuan = min(r,zhuan + x);

} else

if(opt == 1)//降檔

dang --;

zhuan = r;

if(y == 1)

zhuan = min(r,zhuan + x);

} else//檔位不變

ans += zhuan * dang;

if(zhuan == r)

last ++;

else

last = 0;

if(last == k)

break;

} cout << ans << endl;

return 0;}/*

6 3 1 10 5 100

0 10 0

2 12 1

1 11 0

*/

P5269 歐穩歐再次學車

哇 看各位巨佬都來發 t1 的題解 我也來發一篇。別的題目不會別瞎bb 題目大意就是 t 秒 能走多少路程 第一行六個整數 t,n,l,r,x,k 接下來 t 行,每行兩個整數 x,y 表示這一秒的操作。我們設檔為 d 轉速為 v 首先 d 1 v l x 1 d v l x 2 d v r y 0...

洛谷 P5091 尤拉降冪

模板題,無背景 給你三個正整數,a,m,b你需要求 a b mod m 輸入格式 一行三個整數,a,m,b 輸出格式 乙個整數表示答案 輸入樣例 1 複製 2 7 4輸出樣例 1 複製 2輸入樣例 2 複製 998244353 12345 98765472103312450233333333333輸...

尤拉篩選素數(洛谷p1217)

int prime 60000005 bool tag 100000005 memset tag,0,sizeof tag int cnt 0 tag 0 tag 1 1 for int i 2 i prime儲存所有素數,用來列舉最小質因子 tag判斷數字是否為質數,0為質數。注意本題因為記憶體限...