【GDOI2017第二轮模拟day2】中位数

Description

这里写图片描述

Input

这里写图片描述

Output

这里写图片描述

Sample Input

3 2

Sample Output

6

Data Constraint

这里写图片描述

题解

直接做k似乎不好做,所以考虑>=k的方案数,那么最后的答案就是>=k的方案数减去>=k+1的方案数
设>=k的数为1,否则为-1
容易发现如果最中间的一个位置是1而且它旁边的一个也是1的话那么答案一定是1,把这个结论扩展一下,我们发现当从中间开始两边对称且为“1 -1 1 -1 1”的形状,那么答案就是中间的那一个数,如果他不是对称的,那么就找离中间最近的两个连续的1或-1,那么答案就是它,这个也是比较明显的,因为整个图就像是一个倒金字塔的形状,两个连续的会导致在下一层又有两个连续的
那么我们可以先枚举中间的数是1/-1,然后枚举对称的长度,然后就可以通过组合数和一个简单的容斥算出答案了
注意最后要分别乘1,-1个数的阶乘,因为数是可以随便对应1/-1的

贴代码

const md=998244353;
var
    i,j,k,n:longint;
    ans,x,y,z:int64;
    s:array[0..1000005]of int64;
function quickmi(x,y:int64):int64;
var
    t1,t2:int64;
begin
    t1:=1; t2:=x mod md;
    while y>0 do
    begin
        if y mod 2=1 then t1:=(t1*t2) mod md;
        t2:=(t2*t2) mod md;
        y:=y div 2;
    end;
    exit(t1);
end;
function c(x,y:int64):int64;
var
    ans:int64;
begin
    if x>y then exit(0);
    if (x<0) or (y<0) then exit(0);
    ans:=quickmi(s[x]*s[y-x],md-2);
    ans:=(ans*s[y]) mod md;
    exit(ans);
end;
function get(k:longint):int64;
var
    ans,t1,t2:int64;
begin
    t1:=k-1;
    t2:=n-k+1;
    ans:=0;
    for i:=0 to n div 2-1 do
    if i mod 2=0 then
    begin
        ans:=ans+2*c(t2-2*(i div 2)-2,n-2*i-2);
        ans:=(ans-c(t2-2*(i div 2)-3,n-2*i-3)+md) mod md;
    end;
    for i:=0 to n div 2-1 do
    if i mod 2=1 then
    begin
        ans:=ans+2*c(t2-2*((i+1) div 2)-1,n-2*i-2);
        ans:=(ans-c(t2-2*((i+1) div 2)-2,n-2*i-3)+md) mod md;
    end;
    if t2=t1+1 then inc(ans);
    ans:=(ans*s[t1]) mod md;
    ans:=(ans*s[t2]) mod md;
    exit(ans);
end;
begin
    assign(input,'median.in'); reset(input);
    assign(output,'median.out'); rewrite(output);
    readln(n,k);
    s[0]:=1;s[1]:=1;
    for i:=2 to n do s[i]:=(s[i-1]*i) mod md;
    ans:=ans+get(k);
    ans:=(ans-get(k+1)+md) mod md;
    writeln(ans);
    close(input); close(output);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值