把每一位上不递减的数拆成1+11+11111+11111+.....

然后就可以把巨大的N从复杂度中消掉,因为随着长度的增加1...111%p出现了循环节。

然后就是从n个数中选出几个使他们结果为0(mod p)

然后就可以DP了,因为不能有前导零,需要最后再加上以一个数。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long
#define mod 999911659LL
ll x,n,p,cnt[505],tot,sz,now=0,pre=1,add,flag[505],pp=0;
ll dp[2][510][10],fac[20],fac_inv[20];
ll C(ll n,ll m)
{
ll ret=fac_inv[m];
for (n%=mod;m--;ret=1LL*ret*n%mod,n--);
return ret;
} ll qpow(ll a,ll b)
{
ll ret=1;
while (b)
{
if (b&1) (ret*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return ret;
} int main()
{
scanf("%lld%lld",&n,&p); add=x=1;tot=0; x%=p;
for (tot=0;tot<n;++tot)
{
if (cnt[x]) break;
flag[x]=++pp;
cnt[x]++; add=x;
x=(x*10+1)%p;
}
sz=(n-tot)/(pp+1-flag[x]);
tot=(n-tot)%(pp+1-flag[x]);
F(i,0,p-1) if (flag[i]>=flag[x]&&flag[i]<=pp)cnt[i]=cnt[i]*(sz+1);
for (ll i=0;i<tot;++i) cnt[x]++,add=x,x=(x*10+1)%p;
F(i,0,p-1) cnt[i]%=mod;
fac[0]=1;F(i,1,15) fac[i]=(fac[i-1]*i)%mod;
add=(p-add)%p;
F(i,0,15) fac_inv[i]=qpow(fac[i],mod-2);
now=1; pre=0;
memset(dp[now],0,sizeof dp[now]);
dp[now][0][0]=1; if (cnt[0]) F(i,1,8) dp[now][0][i]=C(cnt[0]+i-1,i);
F(i,1,p-1) if (cnt[i]){
now^=1;pre^=1;
memset(dp[now],0,sizeof dp[now]);
F(j,0,p-1) F(k,0,8) if (dp[pre][j][k])
F(l,0,9LL-k-1)
dp[now][(j+i*l)%p][k+l]=(dp[now][(j+i*l)%p][k+l]+1LL*dp[pre][j][k]*C(cnt[i]+l-1,l))%mod;
}
ll ans=0;
F(i,0,8) (ans+=dp[now][add][i])%=mod;
printf("%lld\n",ans);
}

  

BZOJ 1974 [Sdoi2010]auction 代码拍卖会 ——动态规划的更多相关文章

  1. BZOJ 1974: [Sdoi2010]auction 代码拍卖会( dp )

    在1, 11, 111……中选<=8个, + 11..(n个1)拼出所有可能...这些数mod p至多有p中可能, 找出循环的处理一下. 那么dp就很显然了...dp(i, j, k)表示前i种 ...

  2. BZOJ 1974 [Sdoi2010] auction 代码拍卖会(数位dp)

    题目描述 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPig不想把代码库给所有想要的小猪,只想给其中的一部分既关 ...

  3. Bzoj1974 [Sdoi2010]auction 代码拍卖会

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 375  Solved: 151 Description 随着iPig在P++语言上的造诣日益提升,他形成 ...

  4. 【BZOJ-1974】auction代码拍卖会 DP + 排列组合

    1974: [Sdoi2010]auction 代码拍卖会 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 305  Solved: 122[Submit ...

  5. bzoj 1974: [Sdoi2010]代码拍卖会

    Description 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代 码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPi g不想把代码库给所有想要的小猪,只想 ...

  6. SDOI2010代码拍卖会 (计数类DP)

    P2481 SDOI2010代码拍卖会 $ solution: $ 这道题调了好久好久,久到都要放弃了.洛谷的第五个点是真的强,简简单单一个1,调了快4个小时! 这道题第一眼怎么都是数位DP,奈何数据 ...

  7. 【BZOJ1925】[SDOI2010]地精部落(动态规划)

    [BZOJ1925][SDOI2010]地精部落(动态规划) 题面 BZOJ 洛谷 题解 一道性质\(dp\)题.(所以当然是照搬学长PPT了啊 先来罗列性质,我们称题目所求的序列为抖动序列: 一个抖 ...

  8. [SDOI2010]代码拍卖会

    题目描述 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPig不想把代码库给所有想要的小猪,只想给其中的一部分既关 ...

  9. [BZOJ1974][SDOI2010]代码拍卖会[插板法]

    题意 询问有多少个数位为 \(n\) 的形如 \(11223333444589\) 的数位值不下降的数字在\(\mod p\) 的意义下同余 \(0\). $n\leq 10^{18} ,p\leq ...

随机推荐

  1. ios 自定义加载动画效果

    在开发过程中,可能会遇到各种不同的场景需要等待加载成功后才能显示数据.以下是自定义的一个动画加载view效果.      在UIViewController的中加载等到效果,如下 - (void)vi ...

  2. 使用POI创建word表格-在表格单元格中创建子表格

    要实现的功能如下:表格中的单元格中有子表格 实现代码如下: XWPFParagraph cellPara = row.getCell(j).getParagraphArray(0); //row.ge ...

  3. Linux中yum、rpm、configure使用介绍

    安装程序命令介绍 安装包选择策略:能上外网:yum方式.绿色方式->不能上外网:rpm方式.configure方式 1.yum命令yum安装包时,会包所依赖的包也会安装到系统,将源换成163的源 ...

  4. python打开文件可以有多种模式

    一.python打开文件可以有多种模式,读模式.写模式.追加模式,同时读写的模式等等,这里主要介绍同时进行读写的模式r+ python通过open方法打开文件 file_handler = open( ...

  5. Django ORM 一对一,一对多,多对多, 添加,批量插入和查询

    模型类 class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_ ...

  6. python 基础之运算符

    运算符 a=10 ,b=20 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘 ...

  7. vue计算属性无法监听到数组内部变化

    计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data. 首先看一下计算属性的基本写法(摘自官网) var vm = new Vue({ el: '#demo', d ...

  8. quartz测试类

    package demo.mytest; import java.text.ParseException; import org.quartz.CronTrigger;import org.quart ...

  9. Vue构建项目

    构建Vue项目 按照官网教程安装 //先安装脚手架 cnpm i -g vue-cli //查看项目目标列表: webpack browserify pwa 等项目模板 vue list //使用we ...

  10. javascript设计模式(张容铭) 第14章 超值午餐-组合模式 学习笔记

    JS 组合模式更常用于创建表单上,比如注册页面可能有不同的表单提交模块.对于这些需求我们只需要有基本的个体,然后通过一定的组合即可实现,比如下面这个页面样式(如图14-2所示),我们来用组合模式实现. ...