近來,初一年的***
小朋友致力於研究班上同學的配對問題(別想太多,僅是舞伴),通過各種推理和實驗,他掌握了大量的實戰經驗。例如,據他觀察,身高相近的人似乎比較合得來。
萬聖節來臨之際,***
準備在學校策劃一次大型的「非常男女」配對活動。對於這次活動的參與者,***
有自己獨特的選擇方式。他希望能選擇男女人數相等且身高都很接近的一些人。這種選擇方式實現起來很簡單。他讓學校的所有人按照身高排成一排,然後從中選出連續的若干個人,使得這些人中男女人數相等。為了使活動更熱鬧,***
當然希望他能選出的人越多越好。請編寫程式告訴他,他最多可以選出多少人來。
第一行有乙個正整數n,代表學校的人數。n≤100000
第二行有n個用空格隔開的數,這些數只能是0或1,其中,0代表乙個女生,1代表乙個男生
輸出乙個非負整數。這個數表示在輸入資料中最長的一段男女人數相等的子串行長度。
如果不存在男女人數相等的子串行,請輸出0。
輸入 #1
9輸出 #10 1 0 0 0 1 1 0 0
6強大的同機房大佬一眼就看成了km(讀題要仔細啊)
剛開始沒思路偷偷看了演算法標籤之後恍然大悟(還是不熟練啊)
核心思想是字首和,把女生記為-1,男生記為1,求陣列的字首和,當男生缺乙個的時候字首和的值就表現為-1,女生缺乙個的時候就表現為1,利用這個性質,我們再求字首和的時候把每種情況第一次出現的下標記錄一下,在後面遇見相同的情況時兩個下標的差值就是乙個男女人數相同的區間的長度
以樣例為慄:
原陣列 0 1 0 0 0 1 1 0 0
字首和 -1 0 -1 -2 -3 -2 -1 -2 -3
可以很明顯的看出在只有乙個人的時候缺了乙個男生,在第7位的時候還是缺了乙個男生那不用想啊,第2位到第7位的男女人數一定相同啊(不然就見鬼了)
#include #include using namespace std;
mapmp;//用來存每種情況第一次出現的下標值
int main()
; //字首和數租
int n;
cin>>n;
k[0]=0;
int a;
for(int i=1;i<=n;i++)
//初始化字首和數租和mp
int ans=0;
for(int i=n;i>0;--i)
//遍歷所有情況找答案
cout
}
洛谷P1114 「非常男女」計畫
洛谷p1114 非常男女 計畫 map o n 列舉過去 記錄當前值最早出現的時間 x 然後當這個值在 時,出現時間為 y 時 則 x 1 y 這段男女出現次數是為一樣的,更新一下ans就行了 1 include 2 include 3 include 4 include 5 include 6 i...
洛谷P1114 「非常男女」計畫
近來,初一年的 小朋友致力於研究班上同學的配對問題 別想太多,僅是舞伴 通過各種推理和實驗,他掌握了大量的實戰經驗。例如,據他觀察,身高相近的人似乎比較合得來。萬聖節來臨之際,準備在學校策劃一次大型的 非常男女 配對活動。對於這次活動的參與者,有自己獨特的選擇方式。他希望能選擇男女人數相等且身高都很...
洛谷 P1114 非常男女(線性結構)
題目大意 一連串的0和1,我們問最長的01個數相等的連續串 最長是多少 解題思路 這裡用乙個結構做乙個轉換,我們每次遇到0可以讓sum 1,遇到乙個1可以sum 1。記錄下sum在每個位置的值。然後sum值相等的位置例如j和i,讓j i就是答案。但是注意在第0個位置那裡,我們讓sum 0.廢話 1 ...