CF1569C Jury Meeting

Lisa

这个序列只需要考虑最大值和次大值的数量

如果最大值数量大于1,那么所有排列都可以,输出全排列

如果最大值为1且不等于次大值加1,那么不可能存在

如果最大值为1且等于次大值加1,那么只要最大值后面有至少一个次大值就可行

然后就是组合数学算一算

#include
#include
#include
#define int long long
using namespace std;
int mod=998244353;
int jc[200009];
int n;
int t;
int a[1000001];
int inv[1000001];
int ma,mc,ca,cc;
int x;
long long power(int p,int b,int k){
    long long ans=1;
    while(p){
        if(p&1){
            ans*=b;
            ans%=k;
        }
        b*=b;
        b%=k;
        p/=2;
    }
    return ans%mod;
}
signed main(){
    jc[1]=1;
    jc[0]=1;
    inv[0]=1;
    inv[1]=1;
    for(int i=2;i<=200005;++i){
        jc[i]=jc[i-1]*i%mod;
        inv[i]=power(mod-2,jc[i],mod);
    }
    scanf("%lld",&t);
    while(t--){
        scanf("%lld",&n);
        ma=mc=ca=cc=0;
        for(int i=1;i<=n;++i){
            scanf("%lld",&x);
            if(x>ma){
                ca=ma;
                cc=mc;
                ma=x;
                mc=1;
            }else{
                if(x==ma){
                    mc++;
                }else{
                    if(x>ca&&x=2){
            printf("%lldn",jc[n]%mod);
            continue;
        }
        if(mc==1){
            if(ma!=ca+1){
                printf("0n");
            }else{
                int ans=jc[n]%mod*inv[cc+1]%mod*inv[n-cc-1]%mod*jc[cc]%mod*cc%mod*jc[n-cc-1]%mod;
                printf("%lldn",ans);
            }
        }
    }
    return 0;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇