zoukankan      html  css  js  c++  java
  • [SHOI2015]超能粒子炮·改

    题目描述

    曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改——一种可以发射威力更加强大的粒子流的神秘装置。

    超能粒子炮・改相比超能粒子炮,在威力上有了本质的提升。它有两个参数 n , k ,它会向每个编号为 0 到 k (包含两端)的位置 i发射威力为Cnmod2333 的粒子流。

    现在 SHTSC 给出了他的超能粒子炮・改的参数,让你求出其发射的粒子流的威力之和除以 2333 所得的余数。

    输入输出格式

    输入格式:

    第一行一个整数 t表示数据组数。 之后 t行,每行两个整数 n、 k ,含义如题面描述。

    输出格式:

    t行,每行一个整数,表示其粒子流的威力之和模 2333 的值。

    思路:

    我们先看一下样例(p=5,k=10,m=13)

       13 0 1 2 3 4 5 6 7 8 9 10

    1  3  0 1 2 3 4 0 1 2 3 4 0

    5  2  0 0 0 0 0 1 1 1 1 1 2

    我们可以惊奇的发现,这是可以用lucas合并的

    为什么呢?

    这么多重复的(00000)(11111)

    明显可以合并加速

    那怎么合并呢?
    我们可以通过预处理组合数的办法(p只有2333),提前求出组合数c

    再求出组合数前缀和S

    然后递推公式是这个:

    S(n,k)mod p=[S(n/p,k/p-1)*S(n mod p,p-1)+C(n/p,k/p)*S(n mod p,k mod p)]mod p

    再套回去,就出来了

    Code:

    #include<iostream>
    #include<cstdio>
    #define rii register int i
    #define rij register int j
    #define rit register int t
    #define ll long long
    using namespace std;
    long long i,j,k,m,n,x,y,z,p=2333,q;
    long long c[2335][2335],s[2335][2335];
    int C(ll x,ll y)
    {
        return (x<p)?c[x][y]:C(x/p,y/p)*c[x%p][y%p]%p;
    }
    int S(ll n,ll k)
    {
        return (n<p)?s[n][k]:(s[n%p][p-1]*S(n/p,k/p-1)+C(n/p,k/p)*s[n%p][k%p])%p;
    }
    int main()
    {    
        c[0][0]=s[0][0]=1;
        for(rii=1;i<=p;i++)
        {
            s[0][i]=1;
        }
        for(rii=1;i<=p;i++)
        {
            for(rij=0;j<=i;j++)
            {
            	c[i][j]=(c[i-1][j]+c[i-1][j-1])%p;
                s[i][j]=(s[i][j-1]+c[i][j])%p;
            }
            for(rij=i+1;j<=p;j++)
            {
                s[i][j]=s[i][j-1];
            }
        }
        cin>>q;
        for(rit=1;t<=q;t++)
        {
            scanf("%ld",&n);
            scanf("%ld",&k);
            printf("%ld
    ",S(n,k));
        }
    }
    

      

  • 相关阅读:
    DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
    ajax请求jesery接口无法获取参数的问题解决方案
    java乱码问题总结
    indiGolog的安装
    hadoop启动步骤
    ubuntu修改默认jdk
    ubuntu 安装 ssh
    rabbitmq五种模式详解(含实现代码)
    终于可以像使用 Docker 一样丝滑地使用 Containerd 了
    Docker安装Nacos动态服务发现、配置和服务管理平台
  • 原文地址:https://www.cnblogs.com/ztz11/p/9209318.html
Copyright © 2011-2022 走看看