給出1~n的乙個排列,統計該排列有多少個長度為奇數的連續子串行的中位數是b。中位數是指把所有元素從小到大排列後,位於中間的數。
第一行為兩個正整數n和b,第二行為1~n的排列。
【資料規模】
對於30%的資料中,滿足n≤100;
對於60%的資料中,滿足n≤1000;
對於100%的資料中,滿足n≤100000,1≤b≤n。
輸出乙個整數,即中位數為b的連續子串行個數。
輸入 #1複製
7 4輸出 #1複製5 7 2 4 3 1 6
4這是其實是個水題,因為中位數都告訴你了,無非就兩種情況:1、以該中位數為邊界的序列,2、包含這個中位數的序列。只需要用乙個標記陣列記錄每個數與所給中位數的相對大小(大於記為1,小於記為-1),然後以那個指定的中位數的位置向兩邊分別遍歷一遍,記錄標記陣列的累加和,和為零時就為乙個滿足要求的序列(情況1),遍歷另一邊時不僅要考慮情況1,還要再加上指定中位數左邊連續和能和當前連續和相抵消的序列(加起來為零)的個數(用sum記錄的,因為可能會減出負數,所以sum的下標再加上乙個maxn)(情況2)
完整**:
#include using namespace std;
const int maxn=1e5+6;
int a[100010],vis[100010],sum[110000];
int main()
else if(a[i]=1;i--)
}s=0;
for(int i=pos+1;i<=n;i++)
cnt+=sum[maxn-s];
}cout<<++cnt<}
洛谷P3145 CQOI2009 迴圈賽
n隊伍比賽,每兩支隊伍比賽一次,平1勝3負0.給出隊伍的最終得分,求多少種可能的分數表。第一行包含乙個正整數n,隊伍的個數。第二行包含n個非負整數,即每支隊伍的得分。輸出僅一行,即可能的分數表數目。保證至少存在乙個可能的分數表。65 6 7 7 8 8 n 8 這麼小的範圍肯定是搜尋啊。狀態即為當前...
洛谷 P1627 中位數
原題 考場想到了正解,但是依舊選擇了暴力,這究竟是天意,還是人覺啊!為了表示內心的惋惜與痛卻,還寫什麼解題思路啊!找到指定數的位置,算一遍字首和 如果a i include include include include include include include include include...
洛谷P4170 CQOI2007 塗色
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...