BZOJ5368 Pkusc2018 真實排名

2022-05-31 19:15:08 字數 1729 閱讀 1587

description

小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是:成績不小於他的選手的數量(包括他自己)。例如如果3位選手的成績分別是[1,2,2],那麼他們的排名分別是[3,2,2]。擁有上帝視角的你知道所有選手的實力,所以在考試前就精準地估計了每個人的成績,設你估計的第iii個選手的成績為ai,且由於你是上帝視角,所以如果不發生任何意外的話,你估計的成績就是選手的最終成績。但是在比賽當天發生了不可抗的事故(例如遭受到了外星人的攻擊),導致有一些選手的成績變成了最終成績的兩倍,即便是有上帝視角的你也不知道具體是哪些選手的成績翻倍了,唯一知道的資訊是這樣的選手恰好有k個。現在你需要計算,經過了不可抗事故後,對於第i位選手,有多少種情況滿足他的排名沒有改變。由於答案可能過大,所以你只需要輸出答案對998244353取模的值即可。

input

第一行兩個正整數n,k

第二行n個非負整數a1..an

1≤koutput

輸出n行,第i行乙個非負整數ansi,表示經過不可抗事故後,第i位選手的排名沒有發生改變的情況數。

sample input

3 21 2 3

sample output31

2hnit

一共有3種情況:(1,2)翻倍,(1,3)翻倍,(2,3)翻倍。

對於第乙個選手來說,他的成績就算翻倍,其他人都不低於他,所以任意情況下他的排名都不會改變。

對於第二個選手來說,如果是(1,2)翻倍,成績變成(2,4,3),他的排名變成了第一;

如果是(1,3)翻倍,則成績變成(2,2,6),他的排名變成了第三;如果是(2,3)翻倍,則成績變成(1,4,6),他的排名還是第二。

所以只有一種情況。

對於第三個選手來說,如果是(1,2)翻倍,他的排名會變成第二,其他情況下都還是第一。

沒想到居然一遍過!還以為要wa個上萬次才過……

這題非常有意思,首先想容斥,然後發現沒必要;因為我們可以分兩種情況考慮,自己翻倍,或者不翻倍。

首先是自己翻倍的情況,那麼只要找出翻倍之後有多少個點也要跟著一起翻倍即可;

不翻倍的話,只要找出有多少個點一定不能翻倍。

所以,乙個組合數就可以搞定了~

(ps:**內有註解)

/*program from wolfycz*/

#include#include#include#include#include#define inf 0x7f7f7f7f

using namespace std;

typedef long long ll;

typedef unsigned int ui;

typedef unsigned long long ull;

inline int read()

inline void print(int x)

const int n=1e5,p=998244353;

int fac[n+10],inv[n+10];

int val[n+10],list[n+10],sum[n+10],cnt[n+10];

void prepare()

int c(int n,int m)

int main()

return 0;

}

BZOJ5368 Pkusc2018 真實排名

time limit 10 sec memory limit 256 mb 小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是 成績不小於他的選手的數量 包括他自己 例如如果333位選手的成績分別是 1,2,2 那麼他們的排名分別是 3,2,2 擁...

BZOJ5368 Pkusc2018 真實排名

time limit 10 sec memory limit 256 mb submit 163 solved 83 小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是 成績不小於他的選手的數量 包括他自己 例如如果333位選手的成績分別是 1,2...

P5368 PKUSC2018 真實排名

problem link 對於每個 a i 我們可以考慮這 k 個選手中要不要有 a i 如果沒有的話,那我們就看看有哪些 a j 在翻倍後不會影響到 a i 的排名 顯然 2 a j或者 a i le a j 的這些 a j 都滿足要求,我們記它們的個數為 cnt 1 那麼如果這 k 個中有 a ...