基礎演算法 模擬 細節

2021-10-11 21:30:13 字數 1411 閱讀 6768

1337 翻轉遊戲

例如:遊戲有兩關一共4盞燈,第一關levs為"+±-",第二關為 「–++」。你需要5步完成這個遊戲,因為燈初始狀態為"----",5個步驟依次是"+±-",check,"----","–++",check。

輸入多組測試資料,第一行乙個整數t,表示資料個數,其中1<=t<=10

之後有t組相同結構的資料:

每組資料第一行包含兩個整數n,m,其中1<=n,m<=50,注意n是關卡的數量,m是燈的數量

之後有n行,每行乙個m長的字串,表示該關的levs,字串只由』+』,』-』,』?'構成。

輸出每組資料輸出一行乙個整數,即通關最少需要用的單位時間。

輸入樣例

32 4

+±-–++

2 4±++

±++4 2

+++?

?+++

輸出樣例53

5『+』和『-』的變換都沒有問題

看這裡,嚶嚶嚶!!

for

(int j =

1;j <= m;j++

)

但是對於『-』和『+』分別遇到『?』時怎麼處理呢??

我們以『+』為例吧!!

『+』『+』『+』『-』

『-』『-』『-』『?』

『+』『-』『+』『-』

如果『?』變成『 - 』 只需要 5 次

如果『?』變成『+』需要6次

保持不變也只需要5次。。

如果當前x和s的轉換只有『+』轉成『-』而且s中的『?』所對應的x如果是『+』』?『就可以換成『+』。。確定就是ans = ans + 1

如果當前轉換中兩者都出現了肯定ans = ans + 2了,這個』?』換成什麼都可以,那就傳下去吧hhh

上**吧!!

#include

using

namespace std;

char s[

100]

;char x[

100]

;int

main()

if(ok1&&

!ok2) ans++;if

(!ok1&&ok2) ans++;if

(ok1&&ok2) ans = ans +2;

ans++

;for

(int j =

1;j <= m;j++

)else x[j]

= s[j];}

}printf

("%d\n"

,ans);}

return0;

}

基礎演算法 模擬

剛開始有乙個空棧,我們可以對這個棧進行n次操作,每次操作之後返回棧中數字的最大值a i 如果棧為空,那麼則返回0,即a i 0。怎樣對棧進行操作題目已經給出,需要求的是 直接模擬,剛開始隊友可能想到線段樹維護最大值 需要注意的是除了題目中描述的函式的變數型別不改為long long,其他的變數型別全...

基礎演算法 模擬

給乙個長度為n的陣列a,我們現在要選出乙個序列,要求就是這個序列的中位數最接近k,輸出最長的那個滿足要求的序列在陣列a中的下標 輸入 n和k,陣列a 輸出 最長的滿足要求的序列的長度len,以及下標 p1,p2,plen 1 pi n,pi pi 1 input 5 31 2 3 4 5 outpu...

迴圈數 (細節,模擬)

題目描述 迴圈數是那些不包括0這個數字的沒有重複數字的整數 比如說,81362 並且同時具有乙個有趣的性質,就像這個例子 如果你從最左邊的數字開始 在這個例子中是8 數最左邊這個數字個數字到右邊 回到最左邊如果數到了最右邊 你會停止在另乙個新的數字 如果沒有停在乙個不同的數字上,這個數就不是迴圈數 ...