BNUOJ 44586 頑皮的字母 棧的應用)

2021-06-28 01:58:59 字數 958 閱讀 2790

第2行到第t+1行為輸入字串,每行乙個字串。

保證輸入全為英文小寫字母。

ababababc

abacda

aa解析:由於這個特殊的要求,如果用陣列來回掃的話,肯定是超時了。所以我們可以用到棧,這樣每個元素只進棧一次,時間就能達到o(n)的。具體實現方法如下:

先把第乙個字元入棧,再把剩下的n-1個字元入棧, 每次入棧的時候都判斷當前字元和棧頂元素是否滿足跑走的條件:即兩個字元中的較小的那個在字元表中的位置是奇數,且

兩個字元在字母表中位置相鄰。如果滿足的話,就將棧頂元素出棧;否則,就將該字元入棧。然後重複上述操作,直到將剩下的n-1個字元全部掃一遍為止,最後在棧裡面剩的就是剩下的字串,不過直接彈出的話是倒序的,要調整一下順序。

ac**:

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define inf 0x7fffffff

#define ll long long

#define lll(a, b) a<>b

#define mid(a, b) a+(b-a)/2

const int maxn = 1000 + 10;

int main(){

#ifdef sxk

freopen("in.txt", "r", stdin);

#endif // sxk

int n;

string s;

scanf("%d", &n);

while(n--){

char p[100005];

int foo = 0;

cin >> s;

int len = s.size();

for(int i=0; i

BNUOJ 4304 硬幣迷陣

這個迷陣由12個古埃及硬幣構成,形狀如下圖 當我們把所有的硬幣全都翻成正面或全都翻成反面時,我們就可以成功解開這個迷陣。但是這個迷陣有乙個小機關 當我們翻動某乙個硬幣的時候,與它同行或同列的硬幣也將同時被翻動。例如當我們翻動上圖箭頭所指的硬幣之後,迷陣的情況會變成下圖所示 現在prayer希望知道他...

bnuoj 1068 比賽安排

time limit 1000ms case time limit 1000ms memory limit 65536kb 1 每個人每天最多只能參加一場比賽,可以不參加。2 在大賽結束後,任意兩人間都恰好進行了一場對決。由於時間有限,我們希望比賽天數盡可能少,請聰明的你幫忙給出對陣方案。輸入第一行...

BNUOJ 4358 左手定則

描述 玩過rpg 尤其是國產rpg 的童鞋都應該對迷宮這種神棍的設定深惡痛絕,尤其是當你轉了半小時之後發現回到了原地,這種感覺真是無比的痛苦。萬一遊戲還中途崩潰了那真是連掀桌子 砸鍵盤 摔滑鼠的心都有了 經過無數次的trial and error之後,玩家終於下定決心認定迷宮存在的意義就是延長遊戲時...