• 洛谷P4345 超能粒子炮·改


    传送门

    题目描述

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

    超能粒子炮・改相比超能粒子炮,在威力上有了本质的提升。它有两个参数 n,kn,k ,它会向每个编号为 00 到 kk (包含两端)的位置 ii 发射威力为 C_{n}^{i} \bmod 2333C
    n
    i

    mod2333 的粒子流。

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

    输入格式

    第一行一个整数 tt 表示数据组数。

    之后 tt 行,每行两个整数 n,kn,k,含义如题面描述。

    输出格式

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

    输入输出样例
    输入 #1复制
    3
    5 5
    10 7
    1145 14
    输出 #1复制
    32
    968
    763

    说明/提示

    对于 10%10% 的数据,t = 1,n,k \le 1000t=1,n,k≤1000 ;
    对于 30%30% 的数据,t = 1,n,k \le 1000000t=1,n,k≤1000000 ;
    对于 50%50% 的数据,t = 1,n \le 10^{18},k \le 1000t=1,n≤10
    18
    ,k≤1000 ;
    对于 70%70% 的数据,t = 100,n,k \le 10^{18}t=100,n,k≤10
    18

    对于 100%100% 的数据,t = 100000,n,k \le 10{18}t=100000,n,k≤1018

    上代码:

    #include
    #include
    #include
    using namespace std;
    #define LL long long
    const int p = 2333;
    LL t,a,b,c[2550][2550],f[2550][2550];
    inline LL read()
    {
    	LL s = 0, w = 1; char ch = getchar();
    	while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
    	while(ch >= '0' && ch <= '9'){s = s * 10+ch -'0'; ch = getchar();}
    	return s * w;
    }
    LL Lucas(LL n, LL m)//Lucas定理求组合数
    {
    	if(m == 0) return 1;
    	if(n < m) return 0;
    	return c[n%p][m%p] * Lucas(n/p,m/p) % p;
    }
    LL calc(LL n,LL k)
    {
    	if(k < 0) return 0;
    	if(n == 0 || k == 0) return 1;
    	if(n < p && k < p) return f[n][k];
    	return (f[n%p][p-1] * calc(n/p,k/p-1) % p + Lucas(n/p,k/p) * f[n%p][k%p] % p) % p;//递归处理
    }
    void YYCH()//预处理出0-p的组合数
    {
    	c[0][0] = f[0][0] = 1;
    	for(int i = 1; i <= 2500; i++)//杨辉三角求组合数
    	{
    		c[i][0] = c[i][i] = 1;
    		for(int j = 0; j <= i; j++)
    		{
    			c[i][j] = (c[i-1][j-1] + c[i-1][j]) % p;
    		}
    	}	
    	for(int i = 0; i <= 2500; i++) f[i][0] = 1;
    	for(int i = 0; i <= 2500; i++)//组合数的前缀和
    	{
    		for(int j = 1; j <= 2500; j++)
    		{
    			f[i][j] = (f[i][j-1] + c[i][j]) % p;
    		}
    	}
    }
    int main()
    {
    	t = read(); YYCH();
    	while(t--)
    	{
    		a = read(); b = read();
    		printf("%lld\n",calc(a,b));
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
  • 相关阅读:
    虹科新闻 | 虹科电子与 Mend 正式建立合作伙伴关系
    Java实验十三
    中国智能家居市场发展研究
    思科、华为、华三、锐捷网络设备巡检命令
    探究SpringWeb对于请求的处理过程
    分享一些可以提升生信分析效率的vscode插件
    正则表达式 Regular Expression学习
    Spring的Environment
    JavaWeb-CSS
    【日志系统最全】Spring Cloud Sleuth使用ELK收集&amp;分析日志
  • 原文地址:https://blog.csdn.net/lzx_xzl_______/article/details/126183314