time limit: 10 sec memory limit: 256 mb
submit: 163 solved: 83
小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是
:成績不小於他的選手的數量(包括他自己)。例如如果333位選手的成績分別是[1,2,2],那麼他們的排名分別是
[3,2,2]。擁有上帝視角的你知道所有選手的實力,所以在考試前就精準地估計了每個人的成績,設你估計的第iii
個選手的成績為ai,且由於你是上帝視角,所以如果不發生任何意外的話,你估計的成績就是選手的最終成績。但
是在比賽當天發生了不可抗的事故(例如遭受到了外星人的攻擊),導致有一些選手的成績變成了最終成績的兩倍
,即便是有上帝視角的你也不知道具體是哪些選手的成績翻倍了,唯一知道的資訊是這樣的選手恰好有k個。現在
你需要計算,經過了不可抗事故後,對於第i位選手,有多少種情況滿足他的排名沒有改變。由於答案可能過大,
所以你只需要輸出答案對998244353取模的值即可。
第一行兩個正整數n,k
第二行n個非負整數a1..an
1≤k輸出n行,第i行乙個非負整數ansi,表示經過不可抗事故後,第i位選手的排名沒有發生改變的情況數。
3 21 2 331
2樣例解釋
一共有3種情況:(1,2)翻倍,(1,3)翻倍,(2,3)翻倍。
對於第乙個選手來說,他的成績就算翻倍,其他人都不低於他,所以任意情況下他的排名都不會改變。
對於第二個選手來說,如果是(1,2)翻倍,成績變成(2,4,3),他的排名變成了第一;
如果是(1,3)翻倍,則成績變成(2,2,6),他的排名變成了第三;如果是(2,3)翻倍,則成績變成(1,4,6),他的排名還是第二。
所以只有一種情況。
對於第三個選手來說,如果是(1,2)翻倍,他的排名會變成第二,其他情況下都還是第一。
解析:求出每個人的排名rank然後分這個人是否乘2進行討論,設這個人的分數為w。
每次求出 原來小於w,乘2後也小於w的個數sum1.原來大於等於w,乘2後也大於等於w的個數sum2,其他的人數sum3。設第三種人選了q個人。如果有p3+q=rank-1。那麼答案為c(p2)(q)*c(p1+p3)(k-q2)或c(p2)(q)*c(p1+p3)(k-q-1)。
注意當a[i]=0時直接令答案為c(n)(k)即可,省的在求p3的時候特判。細節見**。
**(不太優秀qwq):
#include #define ll long long
using namespace std;
const int max=100010;
const int mod=998244353;
int n,m,k,sum1,sum2,sum3,q;
int num[max],a[max],b[max],ans[max],mul[max],rank[max],inv[max];
inline int get_int()
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
return x*f;
}inline void print(int x)
inline int ksm(int a,int b)
return ans;
}inline void pre()
inline int c(int n,int m)
int main()
} for(int i=1;i<=n;i++) print(ans[i]),putchar('\n');
return 0;
}
BZOJ5368 Pkusc2018 真實排名
time limit 10 sec memory limit 256 mb 小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是 成績不小於他的選手的數量 包括他自己 例如如果333位選手的成績分別是 1,2,2 那麼他們的排名分別是 3,2,2 擁...
BZOJ5368 Pkusc2018 真實排名
description 小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是 成績不小於他的選手的數量 包括他自己 例如如果3位選手的成績分別是 1,2,2 那麼他們的排名分別是 3,2,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 ...