紫書 例題8 7 UVa 11572(滑動視窗)

2022-10-11 06:39:07 字數 928 閱讀 1521

滑動視窗這個方法名字非常形象,先是視窗的右指標盡量往右滑, 滑不動了就滑視窗的左指標, 滑到右指標又可以開始滑動為止。

這道題是要記錄滑的過程中最大的視窗長度, 限制條件是視窗中不能出現重複的值。

重複的值有兩種判斷方法。

一種是set, 其實就是開個vis陣列, 但是資料有10的六次方, 陣列肯定開不下, 所以用set來代替, 用時間換空間, set的查詢是logn, 比陣列要慢。

第二種是用map計算出乙個last陣列, 儲存的是與當前數相同的前乙個數的座標。

兩種方法大同小異。

set版

#include#include#include#define rep(i, a, b) for(int i = (a); i < (b); i++)

using namespace std;

const int maxn = 1123456;

int a[maxn];

int main()

printf("%d\n", ans); }

return 0;

}

map版

#include#include#include#define rep(i, a, b) for(int i = (a); i < (b); i++)

using namespace std;

const int maxn = 1123456;

int a[maxn], last[maxn];

mapcur;

int main()

int l = 0, r = 0, ans = 0;

while(r < n)

printf("%d\n", ans); }

return 0;

}

uva213 優化演算法 紫書例題

注意,我的 和紫書 不一樣。首先來說一下我的 與紫書所給的 的區別。我的 不是對編碼頭做處理,而是對編碼資訊 也就是二進位制需解碼的資訊 進行處理,使其與編碼頭一一對應。怎麼說呢,我覺得我的 有思考的過程,我覺得有必要寫一下。思路 例子 編碼頭 abcdefghijklmn 我希望達成的目的是編碼頭...

紫書 例題 10 13 UVa 830(遞推)

首先我們按照這三個u的位置來分類,當前三個u在i,i 1,i 2。那麼先看三個u前面,前面不能有三個u,因為我們不能重複計算 那麼就是所有的組合減去有u的情況 為了敘述方便,我們設答案為f n 沒有三個u的方案數為 g n 那麼顯然g n 2的n次方 f n 然後我們看三個u後面,後面就任意了是2的...

紫書 例題8 2 UVa 11605(構造法)

這道題方法非常的巧妙,兩層的n n,第一層第i行全是第i個國家,第二層的第j列全是第j個國家。這樣能符合題目的條件。比如說第1個國家,在第一層的第一行全是a,然後在第二層的第一行就有abcde 這樣a就和所有的國家都連線了,其他國家也是一樣的。只能說這種方法非常巧妙吧,答案講出來很簡單,但是不容易想...