騰訊2020校園招聘 後台 不完整題解

2021-10-23 23:27:23 字數 4264 閱讀 4203

整套試卷傳送門

考點:資料結構——棧模擬

傳送門

c++11語法版

#include

using

namespace std;

string s;

void

solve()

--j;

}//stoi是c++11的,c++98會報錯

int len =

stoi

(s.substr

(j+1

,location-j));

string s1 = s.

substr

(location+

1, i-location-1)

;

string s2;

for(

int si =

0; si < len; si++

)

s = s.

replace

(j,i-j+

1,s2)

; i = j;

//替換後i所指向的內容變化,從替換部分的頭開始再尋找

}++i;}}

intmain()

}

考點:資料結構——單調棧

解法:我用了2個單調棧來輔助,乙個單調遞減,乙個單調遞增

#include

using

namespace std;

const

int maxn=

100000+5

;int solve[maxn]

;int leftsum[maxn]

;int rightsum[maxn]

;//左邊的單調遞減棧

void

leftstack

(int n)

else}if

(tag)}}

//右邊的單調遞增棧

void

rightstack

(int n)

else}if

(tag)}}

intmain()

leftstack

(n);

rightstack

(n);if(

1==n)

elseif(

2==n)

else

for(

int i=

0;i++i)

else}}

}return0;

}

我首先想到的是《劍指offer》上好像有類似題目

還記得這個還可以用「」樹狀陣列」來解決

傳送門未ac

您的**已儲存

執行超時:您的程式未能在規定時間內執行結束,

請檢查是否迴圈有錯或演算法複雜度過大。

case通過率為60.00%

#include

using

namespace std;

const

int maxn=

1000000+5

;int solve[maxn]

;int n;

int tmp[maxn]

;//分組處理

void

solution

(int temp)

temp=

(int

)pow(2

,temp)

;int num=n/temp;

int i=0;

int j=temp;

int loop=num;

while

(loop--)}

intmergesort

(int nums,

int tmp,

int l,

int r)

int mid =

(l + r)/2

;int inv_count =

mergesort

(nums, tmp, l, mid)

+mergesort

(nums, tmp, mid +

1, r)

;int i = l, j = mid +

1, pos = l;

while

(i <= mid && j <= r)

else

++pos;

}for

(int k = i; k <= mid;

++k)

for(

int k = j; k <= r;

++k)

copy

(tmp+ l, tmp+ r +

1, nums+ l)

;return inv_count;

}//求逆序數

intmycount()

return

mergesort

(nums, tmp,

0, n -1)

;}intmain()

int m;

scanf

("%d"

,&m)

;for

(int i=

0;i++i)

}return0;

}

隱馬爾科夫…想起了「計算材料學」課程中,好像有提到過這個?

還有隨機游動。。。自我吐槽。。

定義f[i][j] 為截止到前i天, 第i天做選擇j時的最小休息日

演算法的狀態轉移,如下圖

//設定為全域性

intsolve

(int company,

int gym)

if(1==gym[0]

)// 有三個選擇, 分別推導

for(

int i=

1;i)// 只有健身房營業才能選擇健身if(

1==gym[i]

)// 無條件可以選擇休息,所以,需要在前面的基礎上+1

f[i][0

]=min(f[i -1]

[2],

min(f[i -1]

[0], f[i -1]

[1])

)+1;

}return

min(f[n-1]

[0],

min(f[n-1]

[1], f[n-1]

[2])

);}int

main()

for(

int i=

0;i++i)

printf

("%d\n"

,solve

(one,two));

}return0;

}第一感覺,好像考點是「線段樹」?還是「貪心」?

有點像ccf/csp中有道求覆蓋區間的

下面演算法用的「貪心演算法」

我還想用的是deque和自建cmp

結構體模擬這個,但是直接用pair了

#include

using

namespace std;

intmain()

//以first進行排序

sort

(vec.

begin()

,vec.

end())

;if(vec[0]

.first>0)

int right =0;

//右指標

int res =0;

//個數

int loop=0;

//迴圈遍歷

while

(loop

++res;

if(right>=l)

if(loop>=n||vec[loop]

.first>right)}}

return0;

}

後面發現,還有大佬的**很精簡

傳送門

騰訊2020校園招聘 後台

小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住 輸入描述 輸入第一行將包含乙個數字n,代表樓的...

騰訊2020校園招聘 後台(3)

乙個簡單的動態規劃,注釋寫的很明白了 var n parseint readline var p1 newarray n var p2 newarray n var line readline var lines line.split for let i 0 i n i line readline ...

騰訊2020校園招聘 後台 程式設計題

a 壓縮演算法 做法 遞迴處理每個匹配的 中的單詞,再拼接起來。b 逛街 做法 假設現在在i樓,一定可以看到i 1和i 1的樓,i 往左看是形成的序列是乙個單調增的序列,用單調棧可以求出離當前樓最近,而且高度還要高於當前樓的樓。c 逆序對 做法 把序列的歸併樹畫出來,每一層是由許多段構成的。而每一層...