1.1 題目大意
大概是個比較有趣的面試題。
1.2 題目分析
首先考慮如何計算當前的勝率。 這個有兩種演算法,動態規劃和組合數。
1.3 動態規劃
假設當前甲贏了 i 場,乙贏了 j 場。 如果 i = n,那麼 fi,j = 1。 如果 j = n,那麼 fi,j = 0。 對於一般情況,有 fi,j = 1 2 (fi+1,j + fi,j+1)。 可以換一種方法表示,設當前勝率為 p。 如果下一場比賽甲贏了,勝率會變成 p + q。 如果下一場比賽甲輸了,勝率會變成 p − q。 即勝率的增加量和減少量一樣。 這場⽐賽應該下注 2q × 22n−1。 這樣如果勝率增加就贏錢,勝率減少就輸錢。 如果勝率從 1/2 增加到 1,就會贏 22n−1。 如果勝率從 1/2 減少到 0,就會輸 22n−1。 換句話說,當前剩餘錢數,是由勝率決定的。 勝率為 1/2,錢數為 0。 勝率為 1,錢數為 22n−1。 勝率為 0,錢數為 −22n−1。 對於⼀般情況勝率 1/2 + q,錢數為 2q × 22n−1。這樣你便可以寫出乙個 o(n²) 的做法。
1.4 組合數
要預處理組合數和2的次冪。
#include usingview codenamespace
std;
int n, x, y, o, p = 1000000007
;int v[2000020
];long
long c(int n, int
m)
return
re;}
intmain()
x = y =n;
long
long z = c(x + y - 2, x - 1) * 2 %p;
while (x > 0 && y > 0
) else
}return0;
}
滴滴第一題
方法 先求字首和,將pair 字首和的值,字首和標號i 加入multimap中,搜尋每一種字首和的lowerbound和upbound,計算兩者之差,與字首和為零的標號比較,取最大值。include include include includeusing namespace std define ...
猿人學的第一題
思路 分析m後面的加密資訊 這個符號手打搜不到,複製可以。題目 和好幾個人多部落格鏈結,研究三天才理清思路,自學太難了 import requests import execjs import jsonpath class js one def init self,page self.page pa...
杭電第一題
getchar的用法 首先getchar是在stdio.h中宣告一下才能用,所以標頭檔案中必須有stdio.h。他接收的是字元!他的操作原理 當編譯執行至getchar 時,使用者輸入了字元按下回車鍵後,他以回車鍵為開始標識,開始乙個乙個從stdio流中讀取字元,每次讀取字元後,getchar函式的...