TYZ 8 22 艱難的抉擇(非常男女)

2021-07-17 03:23:42 字數 1090 閱讀 2431

t2艱難的抉擇

1.yzx已經當過多次「媒人」了。他因此獲得了許多經驗。例如,距yzx觀察,身高相近的人似乎比較合得來。

yzx在學校策劃了一次大型的「非常男女」配對活動。對於這次活動的參與者,yzx有自己獨特的選擇方式。他希望能選擇男女人數相等且身高都很接近的一些人。這種選擇方式實現起來很簡單,他讓學校的所有人按照身高排成一排,然後從中選出連續的若干個人,使得這些人中男女人數相等。yzx當然希望他能選出的人越多越好,請告訴他最多可以選出多少人來。

第一行有乙個正整數n,代表學校的人數。

第二行有n個用空格隔開的數,這些數只能是0或1,其中,0代表乙個男生,1代表乙個女生。

乙個非負整數,表示最長的一段男女人數相等的子串行長度(如果不存在男女人數相等的子串行輸出0)。

0 1 0 0 0 1 1 0 0

30%的資料,n<=100。

50%的資料,n<=1000。

100%的資料,n<=100000。

也就是非常男女那道題,考試的時候寫了乙個最壞n^2的演算法,自己出了資料都卡掉了,然而在比賽的時候就ac了。尷尬

來說正解:

int sum

每當有乙個漢子的時候,就給這個數字加一

當有妹子的時候,就-1

這時候,如果乙個位置的sum和另外乙個位置的sum相等的話,就證明這兩個位置之間的妹紙和漢子是相等的

估計你已經想出來n^2的做法了吧

這個時候,就要雜湊了,將所有的sum相等的存在一起,對於每個出現過的sum,都計算一下它的標號中的極差,(也就是最大值減最小值)

極差中的最大值就是答案

#include#include#include#include#include#include#includeusing namespace std;

const int maxn=100005*3;

vectorp[maxn];

int n,a;

int sum;

int ans;

const int has=100005;

int main()

int lm=has+n;

for(int i=has-n;i<=lm;i++) }

cout<

筆試基礎歸納 8 22

a 待處理資料的狀態 b 處理器的速度 c 問題的規模 d 程式所佔空間答案是 ac 比如說快排,初始資料的順序影響快排的時間複雜度。a 遞迴下降分析法 b 分析法 c ll 1 分析法 d 算符優先分析法答案d 遞迴下降法和ll 1 都是自頂向下的分析法。a 二維以上的陣列其實是一種特殊的廣義表 ...

《演算法概論》習題8 22

題目 在任務排程中,常常會用到圖。其中節點對應任務,任務i到任務j的有向邊表示i是j的先期條件。這樣的圖描述了排程問題中的任務先後關係 約束 顯然,乙個排程是可行的當且僅當該圖無環 如果排程不可行,我們需要求使其無環所需的最小約束數量。給定乙個有向圖g v,e 子集e e稱為反饋弧集合是指 將其移除...

822 翻轉卡片遊戲

在桌子上有n張卡片,每張卡片的正面和背面都寫著乙個正數 正面與背面上的數有可能不一樣 我們可以先翻轉任意張卡片,然後選擇其中一張卡片。如果選中的那張卡片背面的數字x與任意一張卡片的正面的數字都不同,那麼這個數字是我們想要的數字。哪個數是這些想要的數字中最小的數 找到這些數中的最小值 呢?如果沒有乙個...