传送门:Here

一句话题意:给定$ t$次询问,每次读入$n,k,$求$ \sum_{i=0}^kC_n^k\ mod\ 2333$,

其中$ t \leq 100000$,$n,k \leq 10^{18},$

前置知识:普通卢卡斯定理 $ C_n^k= C_{n \% p}^{k \% p}*C_{n/p}^{k/p} \% p$

我们定义$ S(n,k)=\sum_{i=0}^kC_n^k \% p$

考虑每次询问将式子展开:

$ S(n,k)= \sum\limits_{i=0}^kC_{n/p}^{i/p}*C_{n \%p}^{i \%p}\ mod\ p $

$ =\sum\limits_{i=0}^{k/p-1}C_{n/p}^i* \sum\limits_{j=0}^{p-1}C_{n \%p}^j+ \sum\limits_{i=k/p*p}^kC_{n/p}^{k/p}*C_{n \%p}^{i \%p}$

$ =\sum\limits_{i=0}^{k/p-1}C_{n/p}^i* \sum\limits_{j=0}^{p-1}C_{n \%p}^j+ \sum\limits_{i=0}^{k \%p}C_{n \%p}^{i}*C_{n/p}^{k/p}$

则有$ S(n,k)=S(n/p,k/p)*S(n \%p,p-1)+S(n \%p,k \%p)*C(n/p,k/p) (mod\ p)$

我们可以预处理$ i,j \leq p的s[i][j]和c[i][j]$

那么对于该式子只要递归做第一项以及用卢卡斯求组合数取模的值即可

my code:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rt register int
#define ll long long
#define p 2333
#define r read()
using namespace std;
ll read()
{
ll x = ; int ch = getchar();
while (ch < '' || ch > '') ch = getchar();
while (ch >= '' && ch <= '') x = x * + ch - '', ch = getchar(); return x;
}
void write(ll y)
{
if (y > ) write(y / );
putchar(y % + '');
}
int i,j,k,m,n,x,y,z;
int c[][],s[][];
int C(const ll x,const ll y)
{
return (x<p)?c[x][y]:C(x/p,y/p)*c[x%p][y%p]%p;
}
int S(const ll n,const ll k)
{
return (n<p)?s[n][k]:(s[n%p][p-]*S(n/p,k/p-)+C(n/p,k/p)*s[n%p][k%p])%p;
}
int main()
{
c[][]=s[][]=;
for(rt i=;i<=p;i++)s[][i]=;
for(rt i=;i<=p;i++)
{
for(rt j=;j<=i;j++)
c[i][j]=(c[i-][j]+c[i-][j-])%p,s[i][j]=(s[i][j-]+c[i][j])%p;
for(rt j=i+;j<=p;j++)s[i][j]=s[i][j-];
}
for(rt t=read();t;t--)
{
ll n=read(),k=read();
write(S(n,k)),putchar('\n');
}
return ;
}

因为最多只有log层所以单次复杂度为log次Lucas,能轻松通过此题

「SHOI2015」(LOJ2038)超能粒子炮・改的更多相关文章

  1. loj#2038. 「SHOI2015」超能粒子炮・改

    题目链接 loj#2038. 「SHOI2015」超能粒子炮・改 题解 卢卡斯定理 之后对于%p分类 剩下的是个子问题递归 n,k小于p的S可以预处理,C可以卢卡斯算 代码 #include<c ...

  2. 「SHOI2015」超能粒子炮・改

    「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...

  3. Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 178  Solved: 70[Submit][Stat ...

  4. bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]

    4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...

  5. 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)

    [BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...

  6. 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告

    P4345 [SHOI2015]超能粒子炮·改 题意 求\(\sum_{i=0}^k\binom{n}{i}\),\(T\)组数据 范围 \(T\le 10^5,n,j\le 10^{18}\) 设\ ...

  7. bzoj4591 / P4345 [SHOI2015]超能粒子炮·改

    P4345 [SHOI2015]超能粒子炮·改 题意:求$\sum_{i=1}^{k}C(n,i)\%(P=2333)$ 肯定要先拆开,不然怎么做呢(大雾) 把$C(n,i)$用$lucas$分解一下 ...

  8. BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理

    BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理 Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以 ...

  9. Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)

    Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...

  10. BZOJ 4591 【SHOI2015】 超能粒子炮·改

    题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...

随机推荐

  1. HTTPS笔记:使用 SSLEngine 为 aioserver 服务器提供 SSL 访问支持

    现在 HTTPS 的普及率是越来越高,闲来无事,花了二三天时间,为五年前写的 aioserver 服务器提供了 SSL 访问支持. 查看网上资料,为了提高服务器的高并发,建议使用:SSLEngine ...

  2. 用宏定义代替printf函数

    来自:http://blog.csdn.net/yannanxiu/article/details/52506451 #define _DEBUG_ 1 #if _DEBUG_ #define PR( ...

  3. vue学习(1)

    前置的准备学习: ES6简单语法: 1.let和const 2.模板字符串 3.箭头函数 4.对象的单体模式 5.es6的面向对象 6.模块化 1.let和const <script type= ...

  4. MongoDB 学习记录(二)yum安装

    前言:接着上篇继续学习MongoDB,这次学习的是在Linux下安装MongoDB 环境:centos7.3 安装版本:MongoDB4.0 官网安装教程地址 https://docs.mongodb ...

  5. Python之迭代器,生成器

    迭代器 1.什么是可迭代对象 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. from collections import Iterable l = [1,2,3,4] t ...

  6. 我眼中的正则化(Regularization)

    警告:本文为小白入门学习笔记 在机器学习的过程中我们常常会遇到过拟合和欠拟合的现象,就如西瓜书中一个例子: 如果训练样本是带有锯齿的树叶,过拟合会认为树叶一定要带有锯齿,否则就不是树叶.而欠拟合则认为 ...

  7. 正态分布-python建模

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  8. 【C#】C#格式化文件大小

    /// <summary> /// 格式化文件大小的C#方法 /// </summary> /// <param name="filesize"> ...

  9. nginx的rewrite指令

    需求:我们在接收到一个/api/upload 开头的url的时候 要转发到另外一个地址.但是又不想追加/api/upload  只想追加/upload 地址. Nginx提供了rewrite指令,用于 ...

  10. Mac下显示网页全屏快捷键

    control+command+F mac下谷歌浏览器全屏时隐藏头部:(隐藏标签页和地址栏) command+shift+B