筆試總結 網易2019校招程式設計題 玩橡皮泥

2022-04-30 07:12:12 字數 1189 閱讀 6261

題目我就不多說什麼了,橡皮泥,一串橡皮泥哦。

非黑即白。

小明可以採取以下方法0或多次:

從某一處切割,讓切割處左右佇列內兩條橡皮泥整個發生反轉,再拼接到一起。

輸入:橡皮泥佇列

輸出:最長的黑白相間的橡皮泥長度

樣例輸入:

bwbwb

樣例輸出:

分析:從某一處截斷之後,兩邊同時反轉,相當於如果把每個橡皮泥比作乙個球,放在乙個環裡,從某一處截斷後,倒置環,球又滾到一起拼接起來,我還特意畫了個圖演示。

不知道讀者看懂了沒,反正我是看懂了,那我們接著往下講。

就圖上這個圓圈來說,我們來推導乙個極端的情況,就是圈內所有的球球都填滿了。這時候會發生什麼呢?我覺得玩過這種玩具的熊孩子都應該知道,那就是——

無論你怎麼插,怎麼動,她都不會有一點反應。這就對了。

這是極端情況,代表的是,如果這個bw串首尾相接,那麼就算小明插∞次,整個佇列情況不會有絲毫改變,問題就變成了:

已知乙個環形由b或w組成的串,求其中最長的bw相間的子串長。問題簡單了不?

好,可能字串首尾相接在計算機中不太好表示,其實我資料結構是真的渣,所以我還得繼續簡化:

對乙個已知的環形佇列,進行上述的「分割並反轉」操作,能夠包括所有分割可能的線性佇列是什麼樣的?我們再來看圖。

圖上分別列出了三種分割後進行倒轉產生的新佇列。以此類推,所有的分割情況產生的新佇列,無非是上圖右側佇列的【乙個子佇列】

而上圖右側這個佇列,剛好是原始佇列的x2!

這樣,原問題便轉換為:

已知乙個長為x的佇列,由b或w拼接成。現求相同的兩個x佇列順序拼接後,其中長為x的順序子串行內,能出現的最長bw相間的序列長度。

源**:

1 #include 2 #include 34

using

namespace

std;56

int max(int a,int

b) 10

intmain()

21 ans =max(ans, j);22}

23if (s.size() / 2

26 printf("

%d\n

", ans);

27return0;

28 }

時間複雜度:其中乙個主要迴圈,受制引數為s.size(),所以時間複雜度為o(|s|),|s|為串長。

程式設計 網易2019校招筆試程式設計題

題目 小易有乙個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。熒幕上一共有 n 列,每次都會有乙個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被佔滿時,這一行會被消去,並得到1分。有一天,小易又開了一局遊戲,...

網易2018校招筆試程式設計題

小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以為0 個魔法幣產生更多的魔法幣。魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣...

網易校招程式設計題

define crt secure no warnings 1 include include include includeusing namespace std 小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以...