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 數最左邊這個數字個數字到右邊 回到最左邊如果數到了最右邊 你會停止在另乙個新的數字 如果沒有停在乙個不同的數字上,這個數就不是迴圈數 ...