計蒜客T1583 非常男女

2021-10-09 10:48:57 字數 1363 閱讀 2435

近來,蒜頭君致力於研究班上同學的配對問題(別想太多,僅是舞伴),通過各種推理和實驗,他掌握了大量的實戰經驗。例如,據他觀察,身高相近的人似乎比較合得來。

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

輸入格式

第一行有乙個正整數 n (1≤n≤105),代表學校的人數。

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

輸出格式

輸出乙個非負整數,這個數表示在輸入資料中最長的一段男女人數相等的連續子串行長度。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入

90 1 0 0 0 1 1 0 0

樣例輸出

6

這道題屬於字首和(字首和是乙個陣列的某項下標之前(包括此項元素)的所有陣列元素的和。)演算法的應用,但是我一開始沒想那麼多,以為就直接對輸入的男女0和1分別計數,然後輸出少的那乙個的2倍就行了,後來測試資料過了3組。。。發現沒那麼簡單,要求輸出最長的一段男女人數相等的連續子串行長度,重點要連續

在原陣列中,我們可以用-1代表女生,1代表男生,然後問題就轉化為求乙個最長子序列和為0的長度了。因為乙個男生加乙個女生正好為0,只要找到兩個位置的字首和相等,他們之間就是男女相等的連續子串行。我們記錄每個字首和第一次出現的位置,下次出現的時候,減去第一次的位置就是長度。要注意:字首和都是從陣列的第二個位置開始儲存,也就是下標為 1 的位置開始儲存,為了方便計算下標為 0 的位置都是 0 。第一重迴圈規定所求的區間長度,第二重迴圈來求該區間最長的子串行。只要找到相等就 break 直接求下乙個區間長度的最大子串行,因為我們是從小到大開始遍歷的,所以在所求區間中第一次出現相等就代表最長的子串行,後面的長度就沒有必要進行求了。

**如下:

#include

using

namespace std;

const

int n=

1e5+10;

int per[n]

,s[n]

;int

main()

//找出最長的男女人數相等的子串行

for(i=

1;i<=n;i++)}

} cout

}

**

計蒜客 非常男女 1853

近來,蒜頭君致力於研究班上同學的配對問題 別想太多,僅是舞伴 通過各種推理和實驗,他掌握了大量的實戰經驗。例如,據他觀察,身高相近的人似乎比較合得來。萬聖節來臨之際,蒜頭君準備在學校策劃一次大型的 非常男女 配對活動。對於這次活動的參與者,蒜頭君有自己獨特的選擇方式。他希望能選擇男女人數相等且身高都...

計蒜客t36352 魔法

肯定我要佔滿所有的葉子結點,否則以乙個葉子節點建樹的時候你選的所有點就都在一棵子樹裡,也就不符合要求。反過來,選擇了所有葉子節點,可以證明它是可行的,所以葉子節點構成的集合滿足要求而且最小。如果k 0 k 0k 0直接求出度為1 11的點的數目就好了 如果k 1 k 1k 1,列舉刪哪條邊,我用 x...

紅與黑 計蒜客 T1211

題目鏈結 典型的深搜題,基礎題。蒜廠有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入格式第一行是兩個整數 w和 h,分別表示 x 方向和 y 方向瓷磚的數量。w 和 h 都不超過 ...