终于过了肝了一天啊,怎么我最近都在做细节码农题啊

(这种水平NOIP凉凉??)

luacs大家都可以想到用吧,一开始我的思路是把所有在p以内的%p==0的组合数预处理出来,那C(n/p,m/p)任取,但是好像有重算

仔细思考,其实一个组合数可以拆分成很多个C(x%p,y%p) x<y就有是k的倍数,把这个东西看成p进制,得到推论C(i,j)不是p的倍数当且仅当k进制下i的每一位分别大于等于j

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=1e9+; int alen,a[],blen,b[];
LL S(LL x){return x%=mod,x*(x+)/%mod;}
LL cal(LL a,LL b)
{
if(a<b)b=a;
return (S(a)-S(a-b))%mod;
}
LL f[][][];//第i个位,是否在n的上界边缘,是否在m的上界边缘,每一位i都大于等于j的方案数
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int T,K;
scanf("%d%d",&T,&K);
while(T--)
{
LL n,m,k;
scanf("%lld%lld",&n,&m);if(n<m)m=n;
alen=,k=n;while(k>)a[++alen]=k%K,k/=K;
blen=,k=m;while(k>)b[++blen]=k%K,k/=K;
for(int i=blen+;i<=alen;i++)b[i]=; int len=alen;
memset(f,,sizeof(f));
for(int u=;u<=a[len];u++)
for(int v=;v<=b[len];v++)
{
if(u>=v)
{
if(u==a[len]&&v==b[len])f[len][][]++;
else if(u==a[len])f[len][][]++;
else if(v==b[len])f[len][][]++;
else f[len][][]++;
}
}
int c;
for(int i=len-;i>=;i--)
{
c=;
for(int u=;u<K;u++)
for(int v=;v<K;v++)
{
if(u>=v)
{
if(u<a[i])
{
if(v<b[i])
{
c++;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
}
if(u==a[i])
{
if(v<b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
}
if(u>a[i])
{
if(v<b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
}
}
}
} LL ans=cal(n+,m+);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
ans=(ans-f[][i][j])%mod;
printf("%lld\n",(ans+mod)%mod);
}
return ;
}

bzoj4737: 组合数问题的更多相关文章

  1. BZOJ4737 组合数问题(卢卡斯定理+数位dp)

    不妨不管j<=i的限制.由卢卡斯定理,C(i,j) mod k=0相当于k进制下存在某位上j大于i.容易想到数位dp,即设f[x][0/1][0/1][0/1]为到第x位时是否有某位上j> ...

  2. BZOJ4737 组合数问题 【Lucas定理 + 数位dp】

    题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...

  3. 2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)

    传送门 这是一道让我重新认识lucaslucaslucas的题. 考虑到lucaslucaslucas定理: (nm)≡(n%pm%p)∗(npmp)\binom n m \equiv \binom ...

  4. [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)

    题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...

  5. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  6. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  7. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  8. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  9. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

随机推荐

  1. Burn Down Chart(2018.6.4~2018.6.10)

    Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...

  2. [转]Learn SQLite in 1 hour

    转载说明: 1.原文地址:http://www.askyb.com/sqlite/learn-sqlite-in-1-hour/ 2.译文地址:http://www.oschina.net/quest ...

  3. microsoft ajax registered - to fix microsoft ajax update panel post back

    <dnn:DnnScriptBlock runat="server">     <script type="text/javascript"& ...

  4. (转)淘淘商城系列——初始SolrCloud

    http://blog.csdn.net/yerenyuan_pku/article/details/72944611 本文我只是简单介绍一下SolrCloud,如果大家要是感兴趣的话,可以参考Sol ...

  5. Vue项目优化首屏加载速度

    Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...

  6. ARX自定义实体

    本文介绍了构造自定义实体的步骤.必须继承的函数和必须注意的事项 1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h"," ...

  7. Oracle 数据库连接的一些坑

    问题: ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAMEORA-12514: TNS: 监听程序当前无法识别连接描述符中请求服务 解决办法: 1 权限 安 ...

  8. Oracle数据库的自动备份脚本

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  9. uva 1586 Molar mass(Uva-1586)

    这题做的相当的复杂...之前做的现在应该能简单一点了写的. 我的代码: #include <bits/stdc++.h> using namespace std; main() { int ...

  10. http长链接问题

    http://www.ibm.com/developerworks/cn/web/wa-lo-comet/