東東和他的女朋友(幻想的)去壽司店吃晚餐(在夢中),他發現了乙個有趣的事情,這家餐廳提供的 n 個的壽司被連續的放置在桌子上 (有序),東東可以選擇一段連續的壽司來吃東東想吃鰻魚,但是東妹想吃金槍魚。核 平 起 見,他們想選擇一段連續的壽司(這段壽司必須滿足金槍魚的數量等於鰻魚的數量,且前一半全是一種,後一半全是另外一種)我們用1代表鰻魚,2代表金槍魚。
比如,[2,2,2,1,1,1]這段序列是合法的,[1,2,1,2,1,2]是非法的。因為它不滿足第二個要求。
東東希望你能幫助他找到最長的一段合法壽司,以便自己能吃飽。
input
輸入:第一行:乙個整數n(2≤n≤100000),壽司序列的長度。
第二行:n個整數(每個整數不是1就是2,意義如上所述)
output
輸出:乙個整數(代表東東可以選擇的最長的一段連續的且合法的壽司)
examples這裡我用a陣列儲存輸入的數字串,num陣列儲存連續數字的個數。然後使用雙指標的方法,選取滿足條件序列中數目最小數字的個數,然後選出所有的裡面數目最大值。最後需要注意輸出的值應該是ans的兩倍。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
#include
#include
#include
#include
using
namespace std;
#define _for(i,a,b) for(int i = (a); i < (b); i++)
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)
const
int maxn =
1e5+
100;
int n,ans;
int a[maxn]
;int num[3]
;int
main()
int l,r;
// int flag = 1;
l =0,r =0;
while
(l < n && r < n)
num[a[l]
]= r-l;
l = r;
int m =
min(num[1]
,num[2]
);ans =
max(ans,m);}
cout << ans *2;
}
Week11作業 A 必做題 11
題目 蒜頭君從現在開始工作,年薪 n 萬。他希望在蒜廠附近買一套 60 平公尺的房子,現在 是 200 萬。假設房子 以每年百分之 k 增長,並且蒜頭君未來年薪不變,且不吃不喝,不用交稅,每年所得 n萬全都積攢起來,問第幾年能夠買下這套房子?第一年年薪 n 萬,房價 200 萬 輸入格式 一行,包含...
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 個的壽司被連續的放置在桌子上 有序 東東可以選擇一段連續的壽司來吃 東東想吃鰻魚,但是東妹想吃金槍魚。核 平 起 見,他們想選擇一段連續的壽司 這段壽司必須滿足金槍魚的數量等於鰻魚的數量...