zoukankan      html  css  js  c++  java
  • bzoj3601

    题解:gi(pq=pqi-pqi+di

    至于为什么,可以看看往上的题解

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll N=1005,D=105,q=1e9+7;
    ll p[N],s[N],a[D][D],as[N];
    ll read()
    {
        ll x=0;char c;
        for (;c<'0'||c>'9';c=getchar());
        for (;c>='0'&&c<='9';c=getchar())x=x*10+c-48;
        return x;
    }
    ll ksm(ll x,ll y) 
    {
        ll ret=1;
        for (;y;y/=2,(x*=x)%=q)
         if (y&1)(ret*=x)%=q;
        return ret;
    }
    void elm(ll n) 
    {
        for (ll i=1;i<n;i++) 
         {
            if (!a[i][i]) 
             for (ll j=i+1;j<=n;j++) 
              if (a[j][i]) 
               {
                for (ll k=1;k<=n+1;k++) swap(a[j][k],a[i][k]);
                break;
               }     
            ll inv=ksm(a[i][i],q-2);
            for (ll j=i+1;j<=n;j++)
             if (a[j][i])
              {
                ll tmp=(a[j][i]*inv)%q;
                for (ll k=1;k<=n+1;k++) 
                 a[j][k]=((a[j][k]-a[i][k]*tmp+q)%q+q)%q;
              }
         }
        for (ll i=n;i;i--)
         {
            if (!a[i][i])
            for (ll j=i-1;j;j--)
             if (a[j][i])
              {
                for (ll k=1;k<=n+1;k++) swap(a[j][k],a[i][k]);
                break;
              }   
            ll inv=ksm(a[i][i],q-2);
            for (ll j=i-1;j;j--)
             if (a[j][i])
              {
                ll tmp=(a[j][i]*inv)%q;
                for (ll k=1;k<=n+1;++k) 
                 a[j][k]=((a[j][k]-a[i][k]*tmp+q)%q+q)%q; 
              }
         }
    }
    int main() 
    {
        ll d=read(),w=read();
        for (ll i=1;i<=w;i++) p[i]=read(),s[i]=read();
        ll sum=0;d++;
        for (ll i=1;i<=d;i++)
         {
            (sum+=ksm(i,d-1))%=q;
            ll tmp=1;
            for (ll j=1;j<=d;j++) (tmp*=i)%=q,a[i][j]=tmp;
            a[i][d+1]=sum;
         }
        elm(d); 
        for (ll i=1;i<=d;i++) as[i]=(a[i][d+1]*ksm(a[i][i],q-2))%q;
        ll ans=0;
        for (ll i=1;i<=d;i++)
         {
            ll g=1;
            for (ll j=1;j<=w;j++)
             {
                ll tmp=(ksm(p[j],s[j]*i)-ksm(p[j],s[j]*i+d-i-1)+q)%q;
                (g*=tmp)%=q;
             }
            (ans+=(as[i]*g))%=q;
         }
        printf("%lld",ans);
    }
  • 相关阅读:
    LA 3938 动态最大连续和 线段树
    UVA 11235 频繁出现的数值 RMQ
    LA 4329 ping-pong树状数组
    LA 3027 合作网络 并查集
    vue-url传参
    vue打开新页面的几种方式
    父子组件传参
    vue--按钮级别的权限控制+插件的使用
    小程序填坑
    webpack小试牛刀
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/7795105.html
Copyright © 2011-2022 走看看