[2018雅礼省选集训3-30]table 递推

13人阅读 评论(0) 收藏 举报
分类:

考虑第p行的每个数对询问fx,y的贡献。
对于x>p,观察fi,j=afi1,j+bfi1,j1每个fp,i相当于向下走一步并×a,或者向右下走一步并×b,再给路径条数计下数,就有

fx,y=i=1yfp,iaxpy+ibyi(xpyi)

对于x<p,把式子变形成fi,j=1afi+1,jbafi,j1,相当于向上走一步并×1a,或者向右走一步并×(ba)(且不能再第p行),就有
fx,y=i=1yfp,i(b)yiapx+yi(yi+px1px1)

复杂度O(nq+m)
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define N 100010
#define M 10100010
#define up(x,y) (x=(x+(y))%mod) 
using namespace std;
const int mod=998244353;
int m,n,a,b,p,q;
ll f[N],fac[M],ifac[M],pow_a[M],pow_b[M],ip_a[M];
int read()
{
    int x=0,f=1;char ch=getchar();
    for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
    for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*f; 
}
ll ksm(ll a,int b){ll r=1;for(;b;b>>=1){if(b&1)r=r*a%mod;a=a*a%mod;}return r;}
ll C(int a,int b){return a<b?0:fac[a]*ifac[b]%mod*ifac[a-b]%mod;}
int main()
{
    m=read();n=read();a=read();b=read();p=read();q=read();
    for(int i=1;i<=n;i++)
        f[i]=read();
    fac[0]=1;
    for(int i=1;i<=m+n;i++)
        fac[i]=fac[i-1]*i%mod;
    ifac[m+n]=ksm(fac[m+n],mod-2);
    for(int i=m+n-1;i>=0;i--)
        ifac[i]=ifac[i+1]*(i+1)%mod;
    pow_a[0]=pow_b[0]=1;
    for(int i=1;i<=m+n;i++)
        pow_a[i]=pow_a[i-1]*a%mod,pow_b[i]=pow_b[i-1]*b%mod;
    ip_a[1]=ksm(a,mod-2);
    for(int i=2;i<=m+n;i++)
        ip_a[i]=ip_a[i-1]*ip_a[1]%mod;
    while(q--)
    {
        int x=read(),y=read();ll ans=0;
        if(x>=p)
        {
            for(int k=max(0,y-x+p);k<=y;k++)
                up(ans,C(x-p,y-k)*pow_b[y-k]%mod*pow_a[x-p-y+k]%mod*f[k]);
        }
        else 
        {
            for(int k=y,v=1;k;k--,v=-v)
                up(ans,C(p-x+y-k-1,y-k)*pow_b[y-k]%mod*ip_a[p-x+y-k]%mod*f[k]%mod*v+mod);
        }
        printf("%lld\n",ans);
    }
    return 0;
}
查看评论

雅礼集训1.4 序列

标签:迭代加深搜索,IDA* 题目 序列(sequence) 【题目描述】 给定一个1~n的排列x,每次你可以将x1~xi翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。 【输入数...
  • qwerty1125
  • qwerty1125
  • 2018-01-05 17:43:05
  • 116

[2018雅礼集训1-12]小C的线段树 DP

题面 考虑当n>mn>m时答案为00,1≤nm≤1051\le nm \le 10^5,所以只用考虑n1052n的情况。 把一个区间看成一对括号,设fi,l,rf_{i,l,r}表示前ii个点,之...
  • DOFYPXY
  • DOFYPXY
  • 2018-01-17 22:14:21
  • 160

雅礼集训酱油记(2017-01-11~2017-01-23)

一句话:知道了自己有多弱。。。讲课: 第一天就完全懵逼了,毛爷爷的DP除了学过的听懂了一半,没学过的东西(Knuth、单调性、三分、凸包??)单词都认不到。。。酱油过去。 数据结构还算听懂得比较多...
  • can919
  • can919
  • 2017-01-24 21:59:00
  • 510

[2018雅礼集训1-10]Function 积性函数前缀和

题面 题目要我们求 ∑i=1n∑d|iμ(d)∗σ20(id)\sum_{i=1}^n\sum_{d|i}\mu(d)*\sigma_0^2(\frac{i}{d}) 设f(i)=∑d|iμ(d...
  • DOFYPXY
  • DOFYPXY
  • 2018-01-11 22:18:08
  • 165

[2018雅礼集训1-16]序列 爆搜+贪心

题面 首先问题转化为选取一个(Mi,Vi)(M_i,V_i)的集合,该集合必须满足若Mk|lcm{Mi}M_k|lcm\{M_i\},(Mk,Vk)(M_k,V_k)必须在集合中,最大化∑Vi\su...
  • DOFYPXY
  • DOFYPXY
  • 2018-01-18 20:51:14
  • 101

[2018雅礼集训1-20]B 分块

题面 考虑把序列分成N−−√\sqrt N块,记cnti,jcnt_{i,j}表示第ii块颜色jj的个数,设si,js_{i,j}为i,ji,j两块之间产生的贡献,通过cntcnt可以O(N−−√)...
  • DOFYPXY
  • DOFYPXY
  • 2018-01-20 20:34:31
  • 128

雅礼集训及WC2018划水记

雅礼集训1.30~2.3 noip考成250,没得去thuwc和pkuwc,和czy等去参加本来只有samjia和栋栋的集训队模拟。抱着被虐的心态去比赛。 第一天刚到比较困,比赛有点没精神,看到t...
  • ZLTJohn
  • ZLTJohn
  • 2018-02-12 22:25:15
  • 152

[2018雅礼集训1-16]方阵 stirling数反演

题面 如果只考虑行不相同,答案显然为(cM)N−(c^M)^\underline N。 再考虑列不相同的情况,把相同的列看成一个等价类,至多ii个等价类F(i)F(i)的方案为(ci)N−(c^i...
  • DOFYPXY
  • DOFYPXY
  • 2018-01-20 18:38:10
  • 135
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 2429
    排名: 1万+
    最新评论