传送门

比赛手动打了四项感觉有规律,调了40min+之后重新手算了后面几项发现只有前四项满足规律233。


首先这道题只跟q−xq-xq−x有关。

我们尝试找找递推关系。

我们令f[i]f[i]f[i]表示区间左右端点之差为i时的期望步数。

那么显然有:

f[0]=f[0]=f[0]=不存在(方便计算可以看做0)

f[1]=(f[0]+f[1])2+1f[1]=\frac {(f[0]+f[1])} {2}+1f[1]=2(f[0]+f[1])​+1

f[2]=(f[0]+f[1]+f[2])3+1f[2]=\frac {(f[0]+f[1]+f[2])} {3}+1f[2]=3(f[0]+f[1]+f[2])​+1



f[k]=∑i=0kf[i]k+1+1f[k]=\frac {\sum_{i=0} ^kf[i]} {k+1}+1f[k]=k+1∑i=0k​f[i]​+1

接着我们考虑用前k−1k-1k−1项的前缀和sum[k−1]=absum[k-1]=\frac {a}{b}sum[k−1]=ba​来推出f[k]f[k]f[k]和sum[k]sum[k]sum[k]。

显然有:

f[k]=sum[k−1]+f[k]k+1+1f[k]=\frac {sum[k-1]+f[k]} {k+1}+1f[k]=k+1sum[k−1]+f[k]​+1

=>f[k]∗k=sum[k−1]+k+1f[k]*k=sum[k-1]+k+1f[k]∗k=sum[k−1]+k+1

带入sum[k−1]=a/bsum[k-1]=a/bsum[k−1]=a/b得出:

f[k]∗k=a+b∗(k+1)bf[k]*k=\frac {a+b*(k+1)}{b}f[k]∗k=ba+b∗(k+1)​

=>f[k]=a+b∗(k+1)b∗kf[k]=\frac {a+b*(k+1)}{b*k}f[k]=b∗ka+b∗(k+1)​

=>sum[k]=ab+a+b∗(k+1)b∗ksum[k]=\frac {a}{b}+\frac {a+b*(k+1)}{b*k}sum[k]=ba​+b∗ka+b∗(k+1)​

=>sum[k]=(k+1)∗(a+b)b∗ksum[k]=\frac {(k+1)*(a+b)}{b*k}sum[k]=b∗k(k+1)∗(a+b)​

由于答案要用逆元,因此我们维护两个前缀数组a[],b[]a[],b[]a[],b[],用a[i]b[i]\frac{a[i]}{b[i]}b[i]a[i]​来表示sum[i]sum[i]sum[i]就行了。

于是线性递推出a,ba,ba,b数组就ok了。

注意并不能用线性筛逆元,并且需要时刻维护a,ba,ba,b数组是小于modmodmod的。

p.s.可以用数论知识来证明a,ba,ba,b的取模对答案没有影响,这里就不证了。

代码:

#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
using namespace std;
inline ll read(){
    ll ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
inline ll ksm(ll x,int p){
    ll ret=1;
    while(p){
        if(p&1)ret=ret*x%mod;
        x=x*x%mod,p>>=1;
    }
    return ret;
}
ll a[10000005],b[10000005];
int main(){
    a[0]=0,b[0]=1;
    for(int i=1;i<=10000000;++i)a[i]=(a[i-1]+b[i-1])*(i+1)%mod,b[i]=b[i-1]*i%mod;
    int T;
    scanf("%d",&T);
    while(T--){
        ll l=read(),r=read(),tmp=r-l;
        if(!tmp){puts("0");continue;}
        printf("%lld\n",(a[tmp-1]+b[tmp-1]*(tmp+1)%mod)%mod*ksm((b[tmp-1]*tmp%mod),mod-2)%mod);
    }
    return 0;
}

2018.09.28 牛客网contest/197/C期望操作数(状态转移+前缀和递推)的更多相关文章

  1. 2018.09.28 牛客网contest/197/B面积并(二分+简单计算几何)

    传送门 比赛的时候把题目看成求面积交了,一直没调出来. 下来发现是面积并气的吐血. 码了一波发现要开long double. 然而直接用现成的三角函数会挂. 因此需要自己手写二分求角度. 大致思路就是 ...

  2. 2018.09.28 牛客网contest/197/A因子(唯一分解定理)

    传送门 比赛的时候由于变量名打错了调了很久啊. 这道题显然是唯一分解定理的应用. 我们令P=a1p1∗a2p2∗...∗akpkP=a_1^{p_1}*a_2^{p_2}*...*a_k^{p_k}P ...

  3. 牛客网第二场Jfarm(随机化+二维前缀和)

    链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...

  4. 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)

    题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...

  5. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  6. 牛客网 2018年东北农业大学春季校赛 L题 wyh的天鹅

    链接:https://www.nowcoder.com/acm/contest/93/L来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 262144K,其他语言524288 ...

  7. 牛客网 2018年东北农业大学春季校赛 I题 wyh的物品

    链接:https://www.nowcoder.com/acm/contest/93/I 来源:牛客网 时间限制:C/C++ 5秒,其他语言10秒空间限制:C/C++ 262144K,其他语言5242 ...

  8. 2018年牛客网NOIP赛前训练营游记

    2018年牛客网NOIP赛前训练营游记 提高组(第一场) 中位数 #include<cstdio> #include<cctype> #include<climits&g ...

  9. 牛客网国庆集训派对Day6 题目 2018年

    链接:https://www.nowcoder.com/acm/contest/206/A来源:牛客网 Birthday 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576 ...

随机推荐

  1. Delphi 变体数组 Dataset Locate 查找定位

    Format 函数 Delphi 支持“开参数”和动态数组,变体数组,使用时的语法类似 Delphi 中的集合:采用两个方括号把不同类型的变量括起来(这太方便了啊),也可以采用声明一个 TVarRec ...

  2. cmd 查看本地端口被占用程序

    netstat -ano 列出当前活动的网络连接 参数:-a所有侦听端口  -n以数字格式显示地址和端口号 -o显示进程号 tasklist|find "8888" 找出占用888 ...

  3. hadoop 集群安装配置 【转】

    http://www.cnblogs.com/ejiyuan/p/5557061.html 注意:要把master 上所有的配置文件(主要是配置的那四个 xxxx-site.xml 和 xxx-env ...

  4. topGO

    前面我们讲过GO.db这个包,现在接着延伸topGO包,该包是用来协助GO富集分析 1)安装 if("topGO" %in% rownames(installed.packages ...

  5. Cookie的Domain属性

    Cookie 加了Domain后就写不进去了(不加domain就可以写进去了) 本地测试的时候需要把domain换成localhost cookie跨域的问题,意思就是说A.com下能访问B.com域 ...

  6. hdoj Max Sum Plus Plus(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024 题意:----最大M子段和问题给定由 n个整数(可能为负整数)组成的序列a1,a2,a3,……, ...

  7. LuoguP1226 【模板】快速幂||取余运算

    题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...

  8. SUSE11&12 永久关闭防火墙

    SUSE11下:关闭操作为:service SuSEfirewall2_setup stopservice SuSEfirewall2_init stop取消开机启动防火墙:chkconfig SuS ...

  9. Ubuntu 16.04中VirtualBox 5.1使用U盘/USB设备的方法

    环境: Ubuntu 16.04 LTS VirtualBox 5.1.26 r118224 虚拟机系统:Windows 7 SP1 64 安装扩展: 在这里下载:(自己注意版本好,版本不匹配安装不成 ...

  10. jquery获取当前屏幕宽度

    参考文章 <script type="text/javascript"> $(document).ready(function() { alert($(window). ...