《高階指南》練習0x03 0x04

2022-09-09 04:51:12 字數 1461 閱讀 9154

0x03練習**

這三個題都是字首和/差分,跟遞迴半毛錢關係都沒有。

p2280 [hnoi2003]雷射炸彈

二維字首和裸題。

const int maxn = 5e3 + 9;

int s[maxn][maxn];

signed main()

for (int i = 1; i < maxn; ++i)

for (int j = 1; j < maxn; ++j)

s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];

int ans = 0;

for (int i = m; i < maxn; ++i)

for (int j = m; j < maxn; ++j)

ans = max(ans, s[i][j] - s[i - m][j] - s[i][j - m] + s[i - m][j - m]);

cout << ans << endl;

return 0;

}

p4552 [poetize6] incdec sequence

區間加相當於在差分陣列上左邊加右邊減,目標是差分陣列第二項開始全為 \(0\)。那麼第一問就做完了。

第二問是這樣的:對於差分陣列中配完對剩下的的正數或負數,選擇區間加或減都是自由的,各自會給答案增加一種情況。

**:

int a[maxn], d[maxn];

signed main()

ll cnt1 = 0, cnt2 = 0;

for (int i = 2; i <= n; ++i)

cout << max(cnt1, cnt2) << endl;

cout << abs(cnt1 - cnt2) + 1 << endl;

return 0;

}

p2879 [usaco07jan]tallest cow s

這題去年做過,就不寫**了。自己構造差分陣列,對於每個給出的區間 \([l,r]\),d[l+1]--, d[r]++​,最後求一遍字首和即可。區間注意判重。

0x04練習**

只有乙個題 #10012. 「一本通 1.2 例 2」best cow fences

二分平均值即可。

const double eps = 1e-8;

const int maxn = 1e5 + 9;

int n, l;

double a[maxn], s[maxn];

bool check(double **g)

return false;

}signed main()

cout << (int)(r * 1000) << endl;

return 0;

}

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

《演算法競賽高階指南》0x32約數

求解 1,n 之間的最大的反素數,有性質 這個反素數是質因數個數最多的數中最小的乙個。證明 假設有乙個數質因數個數比它多,如果在他前面,不滿足反素數的定義,如果在他後面,一定可以找到第乙個質因數比它大的數,這個數作為結果更好,反證可知,這個數質因數一定是最多的 反證 假設有質因數與他的個數一樣但是比...

0X04儲存資料

coding utf 8 usr bin python 儲存資料 模組json 讓你能夠將簡單的python資料結構轉儲到檔案中,並在程式再次執行時載入該檔案中的資料。你還可以使用json 在python程式之間分享資料。更重要的是,json資料格式並非python專用的,這讓你能夠將以json格式...