传送门

比赛手动打了四项感觉有规律,调了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. Linq相关

    Linq(语言集成查询) 相关资料如下: 1. Linq语言集成查询 百度百科 2. 30分钟Linq教程 3. Linq查询表达式(C#编程指南) 4. Linq十个常用查询 5. Linq技术专题 ...

  2. ng2-file-upload 使用记录

    最近这两周一直在修bug,修的很是痛苦,不过痛苦也是件好事,不然每天都是在做同样的事情,没有什么挑战,工作多无聊呀! 是吧. 大致说一下背景吧: 这个项目是两年前开新项目,到现在一直还在开发中,一直不 ...

  3. virtual abstract override new 几点学习

    1.Vitual方法和普通方法区别为:继承其的子类可以用override/new在重载此方法,也可以不重载其方法,有方法体(可以写语句),override修饰则调用子类方法2.abstract类中抽象 ...

  4. 吴裕雄 数据挖掘与分析案例实战(14)——Kmeans聚类分析

    # 导入第三方包import pandas as pdimport numpy as np import matplotlib.pyplot as pltfrom sklearn.cluster im ...

  5. 岭回归和lasso回归(转)

    回归和分类是机器学习算法所要解决的两个主要问题.分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题.但是回归就稍微复杂一些,回归模型的输出值 ...

  6. DBA 招聘

    数据库管理员(资深) 眼控科技 10-19万 72小时反馈 上海 6小时前 大专及以上 2年以上经验 普通话 25-35岁 绩效奖金 带薪年假 午餐补助 定期体检 年底双薪 五险一金 职位描述: 工作 ...

  7. 各种id生成策略

    package com.taotao.utils; import java.util.Random; /** * 各种id生成策略 */ public class IDUtils { /** * 图片 ...

  8. DNS使用的是TCP协议还是UDP协议

    原文:http://benbenxiongyuan.iteye.com/blog/1088085 DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP ...

  9. Python 字典 get() 方法

    描述 Python 字典 get() 方法和 setdefault() 方法类似,返回指定键的值,如果键不在字典中,返回一个指定值,默认为None. get() 和 setdefault() 区别:  ...

  10. springmvc后台生成验证码

    url http://localhost:8080/admin/getCode http://localhost:8080/admin/checkCode controller package com ...