整套試卷傳送門
考點:資料結構——棧模擬
傳送門
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 逆序對 做法 把序列的歸併樹畫出來,每一層是由許多段構成的。而每一層...