GDOI2017第二輪模擬day2 中位數

2021-07-30 15:41:17 字數 961 閱讀 9657

給定n,k,求多少個n的排列在經過以下計算後得到k:

n≤1000000 且為奇數

直接算不好算,可以轉化成:結果是大於等於k的減大於等於k+1的。

然後把大於等於k的數看成1,小於k的看成0。繼續挖掘有什麼性質。

把每一層看成去掉第

一、最後的位置,在草稿紙上手玩一下,可以發現:

1. 如果原序列中間的數是1,且兩邊有乙個1,那麼答案一定是1

2. 如果原序列中間的數與兩邊的不同,那麼向兩邊擴充套件(要一直保證對稱且相鄰元素不同)。例如:01010101011,得到的是1

那麼可以列舉對稱的部分有多大,然後用組合數計算未確定的部分

注意判邊界

時間複雜度o(

n)

#include 

#include

#include

using namespace std;

const int n=1000005,mo=998244353;

typedef long long ll;

int n,m,fac[n],inv[n],f_inv[n],ans;

int c(int n,int

m)int calc(int

m) ans=(m==n/2+1);

for (int i=1;i<=n/2;i++)

}ans=(ll)ans*fac[m]%mo

*fac[n-m]%mo;

return ans;

}int main()

ans=calc(n-m+1)-calc(n-m);

if (ans<0) ans+=mo;

printf("%d\n",ans);

return

0;}

GDOI2017模擬第二輪 4 15 4 17

round 1 4.15 今天發揮。不好不差吧,一般般,基本沒有失分,但是相對的也沒有爆分。原以為t3可以搞一波大事情結果wa了,其實我拍出錯了但是並不知道 錯了,肉眼調不出錯,又是大資料,我小資料全對,就是大資料炸了,很不爽。第乙個小時拿來看題目。感覺t1是神題,先放著。t2的話,打表的分數挺多啊...

GDOI2017模擬第二輪總結

這場一上來就開始想t1,想了一段時間還是沒什麼思路,然後剛t3,感覺bitset可做。但是後面發現bitset只能處理空降而不能處理移動,於是就趕緊先打了乙個60分暴力。t2打表水了60,然後t4打了乙個20分暴力。還剩下1.5h回過頭來做t1,打了一半發現有問題,最後只好打30分暴力。主要是t1思...

gdoi2017四輪模擬最後總結

由於太急導致題目沒看清楚,碼了錯的暴力,這個非常虧,做了無用功。mle不用說,太貪心想打多點暴力分,結果空間開大了,直接爆零得不償失。想法不夠精簡,導致實現起來十分困難,浪費的時間沒拿到應有的分。細節沒考慮好,明明注意到了細節,處理了卻沒處理好。有想法卻看漏條件,導致出了偏差,想到並實現了錯誤的方法...