2015網易遊戲筆試02

2021-07-05 08:03:17 字數 2005 閱讀 2476

題目大意:

給定乙個壓縮後的字串,求其解壓縮之後的長度。

兩個儲存的規則:

(1)如果字串中有連續相同的大寫字母,它們可以選擇用」字元+出現次數」的方式替代。如字串』aabccccdd』,可以用』a2bc4d2』表示,也可以用』a2bc2c2dd』表示。

(2)如果字串中有連續出現的模式串(模式串長度大於1),它們可以選擇用」(模式)+出現次數」的方式替代。如字串』fabcabcabce』,可以用』f(abc)3e』表示,也可以用』f(abc)2abce』表示。

上述規則中的」連續」均指出現次數大於1,規則(2)中的括號後一定是乙個大於1的數值,代表出現次數。

綜合上述兩個規則,字串』aabaabfaabaabfg』可以用』((a2b)2f)2g』表示。小y保證輸出的壓縮串符合上述的兩個規則,以下型別的非法字串不會出現:

『(a)5』: 括號冗餘

『a1a4』: 數字1冗餘

『a((aa))2』: 括號冗餘

(abc)1: 括號和數字1冗餘

對於給定的乙個用上述規則壓縮後的字串,對應的原串是唯一的。小y想知道這個字串原來的長度是多少,以此計算壓縮倍率。你能幫助他嗎?

樣例輸入

4(aa)2

a((a2b)2)2g

wangyi

a2bc4d2

樣例輸出513

69

維護乙個棧,

遇到 『(』 將當前累計長度先壓棧,

遇到 『)』則需要考慮其後面的數字串,將當前長度乘倍,並且將 棧頂元素出棧,累加到當前的長度上,

遇到a-z,將當前長度 +1

遇到數字,代表前乙個字元乘倍

#include 

#include

#include

using

namespace

std;

//fstream resource("/users/bingoboy/downloads/cases.txt");

int cnt;

string tmp;

stack

cstack;

char buf[110];

int main()else

if(buf[i]==')')

cur*=mul; mul=0; // 當前長度乘倍

i=j;

}else

cur+=ntk.top(); ntk.pop(); //棧頂元素出棧 ,累加到當前長度

}else

if(isdigit(buf[i]))

cur+=mul-1; mul=0; //前乙個字元乘倍

i=j;

}else

}cout

/*int parentheses(string & aa)

int fcnt = 0;

int amount = 0;

for (int i = 0; i < aa.size(); ++i)

if (aa[i] == ')')

i--;

cstack.pop();

fcnt = amount * fcnt + cstack.top();

amount = 0;

cstack.pop();

continue;

}while (aa[i] <= '9' && aa[i] >= '0')

if (amount > 0)

fcnt += 1;

}return fcnt;

}int main(int argc, const char * argv)

return 0;

}*/

掃碼關注作者,定期分享技術、演算法類文章

2015網易遊戲校園招聘筆試題 研發崗

題量比較大,大題有6個。1.最小字典序字串,2.遞迴繪圖函式轉非遞迴 3.遊戲程式設計中常用的資料結構4叉樹,有三問,一問是寫出如何判斷點在矩形中和判斷兩矩形是否相交,第二問是寫建立四叉樹的實現,第三問是如何根據已知的矩形塊,在四叉樹中尋找包含的物體。4.kd樹,英文題,沒怎麼看,第一問問給出的乙個...

2020 08 08網易筆試

注釋部分 超時了,優化後如下 def test1 n int input arr list map int input strip split n res 0for i in range n res countprime arr i return res defcountprime n if n 2...

(原創)名企筆試 2017網易遊戲筆試 (賽馬)

在一條無限長的跑道上,有n匹馬在不同的位置上出發開始賽馬。當開始賽馬比賽後,所有的馬開始以自己的速度一直勻速前進。每匹馬的速度都不一樣,且全部是同樣的均勻隨機分布。在比賽中當某匹馬追上了前面的某匹馬時,被追上的馬就出局。請問按以上的規則比賽無限長的時間後,賽道上剩餘的馬匹數量的數學期望是多少?輸入描...