東東和他的女朋友(幻想的)去壽司店吃晚餐(在夢中),他發現了乙個有趣的事情,這家餐廳提供的 n 個的壽司被連續的放置在桌子上 (有序),東東可以選擇一段連續的壽司來吃
東東想吃鰻魚,但是東妹想吃金槍魚。核 平 起 見,他們想選擇一段連續的壽司(這段壽司必須滿足金槍魚的數量等於鰻魚的數量,且前一半全是一種,後一半全是另外一種)我們用1代表鰻魚,2代表金槍魚。
比如,[2,2,2,1,1,1]這段序列是合法的,[1,2,1,2,1,2]是非法的。因為它不滿足第二個要求。
東東希望你能幫助他找到最長的一段合法壽司,以便自己能吃飽。
用num1和num2來記錄一串連續的1和2的個數,用now1和now2來表示當前索引之前的區間是全1還是全2。
若在區間1裡又讀到1,則num1++;否則讀到了2,此時區間可能為12或212,要更新答案為之前的12相等個數,然後清空開始的2的個數,讓num2=1,並記錄當前區間為2,即now2=1,now1=0。區間2同理。
一道模擬題,考察對連續區間的處理。
#include
using
namespace std;
int n;
int a[
100010];
int ans=0;
//有幾個1,即ans為答案的一半
int num1=
0,num2=0;
//當前索引i之前的區間有多少1和2
bool now1=
0,now2=0;
//之前區間是1還是2
intmain()
}else
if(a[i]==2
)}}//處理結尾的兩個區間
ans=
max(ans,
min(num1,num2));
cout<2<}
week11作業D 必做題11 4
樣例 input 72 2 2 1 1 2 2 output 4input 61 2 1 2 1 2 output 2input 92 2 1 1 1 2 2 2 2 output 6這題用滑窗的思想解決。具體細節和注釋都在 裡。include using namespace std int a 1...
Week11 作業 D 必做題11 4
一 題目描述 題面 東東和他的女朋友 幻想的 去壽司店吃晚餐 在夢中 他發現了乙個有趣的事情,這家餐廳提供的 n 個的壽司被連續的放置在桌子上 有序 東東可以選擇一段連續的壽司來吃 東東想吃鰻魚,但是東妹想吃金槍魚。核 平 起 見,他們想選擇一段連續的壽司 這段壽司必須滿足金槍魚的數量等於鰻魚的數量...
Week11 作業D 必做題11 4
東東和他的女朋友 幻想的 去壽司店吃晚餐 在夢中 他發現了乙個有趣的事情,這家餐廳提供的 n 個的壽司被連續的放置在桌子上 有序 東東可以選擇一段連續的壽司來吃 東東想吃鰻魚,但是東妹想吃金槍魚。核 平 起 見,他們想選擇一段連續的壽司 這段壽司必須滿足金槍魚的數量等於鰻魚的數量,且前一半全是一種,...