Description

随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代
码库。猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库。iPi
g不想把代码库给所有想要的小猪,只想给其中的一部分既关系好又
肯出钱的小猪,于是他决定举行了一个超大型拍卖会。 在拍卖会上
,所有的N头小猪将会按照和iPig的好感度从低到高,从左到右地在i
Pig面前站成一排。每个小猪身上都有9猪币(与人民币汇率不明),
从最左边开始,每个小猪依次举起一块牌子,上面写上想付出的买代
码库的猪币数量(1到9之间的一个整数)。大家都知道,如果自己付
的钱比左边的猪少,肯定得不到梦寐以求的代码库,因此从第二只起
,每只猪出的钱都大于等于左边猪出的价钱。最终出的钱最多的小猪
(们)会得到iPig的代码库真传,向着保送PKU(Pig Kingdom Unive
rsity)的梦想前进。 iPig对自己想到的这个点子感到十分满意,在
去现场的路上,iPig就在想象拍卖会上会出现的场景,例如一共会出
现多少种出价情况之类的问题,但这些问题都太简单了,iPig早已不
敢兴趣了,他想要去研究更加困难的问题。iPig发现如果他从台上往
下看,所有小猪举的牌子从左到右将会正好构成一个N位的整数,他
现在想要挑战的问题是所有可能构成的整数中能正好被P整除的有多
少个。由于答案过大,他只想要知道答案mod 999911659就行了。
Input
一行:两个数N(1≤N≤10^18)、P(1≤P≤500),用一个空格分开。
Output
一行:一个数,表示答案除以999911659的余数。
Sample Input
2 3
Sample Output
15
样例解释
方案可以是:12 15 18 24 27 33 36 39 45 48 57 66 69 78 99,共15种。

解题报告:

这题真的可以玩死人啊,见过的最恶心,没有之一,首先要明白,这题中因为存在数列递增的性质,所以可以拆成1,11,111,1111,11111...中任意选9个以下的数字的和构成的数字,这也是此题给我的最大启发.
然后就是DP,首先看数据范围我们只能从p下手,我们先预处理出1,11,111...中cnt[i]表示mod P后==i的数的个数,这个可以发现是循环的,处理完这里你就胜利了,DP十分简单,定义f[i][j][k] 表示已经处理到了前cnt[i],和mod P为j,一共用了k个数字的方案,容易看出f[i+1][(j+l×i)][k+l]=f[i][j][k]×C[cnt[i]+l-1][l],C[cnt[i]+l-1][l] 是从cnt[i]个中选出l个的可重组合方案

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n;
int k,f[505][10][505],dep[505],inv[10],c[505][10];
long long cnt[505];
long long p=999911659;
int main()
{    scanf("%lld%d",&n,&k);int s=0;cnt[0]++;int beg,len;if(n<=k)for(int i=1;i<=n;i++)cnt[s=(s*10+1)%k]++,cnt[s]%=p;else{    for(int i=1;i<=k+1;i++){    s=(s*10+1)%k;if(cnt[s]){    beg=dep[s];len=i-dep[s];break;}cnt[s]++;dep[s]=i;}for(int i=0;i<k;i++)if(cnt[i]>0&&dep[i]>=beg){    cnt[i]=(n-beg+1)/(long long)len%p;if((dep[i]-beg+1)<=(n-beg+1)%(long long)len)cnt[i]=(cnt[i]+1)%p;if((dep[i]-beg+1)%(long long)len==(n-beg+1)%(long long)len)s=i;}}inv[1]=1;for(int i=2;i<=8;i++)inv[i]=p-(long long)(p/i)*inv[p%i]%p;memset(f,0,sizeof 0);memset(c,0,sizeof c);for(int i=0;i<k;i++){    c[i][0]=1;for(int j=1;j<=8;j++){    c[i][j]=cnt[i]*c[i][j-1]%p*inv[j]%p;cnt[i]++;cnt[i]%=p;}}f[0][0][s]=1;for(int i=0;i<k;i++){    for(int j=0;j<9;j++){    for(int x=0;x<k;x++){    for(int y=0;y<=j;y++){    f[i+1][j][x]=(f[i+1][j][x]+(long long)f[i][j-y][(x-y*i%k+k)%k]*c[i][y]%p)%p;}}}}printf("%d\n",f[k][8][0]);return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/7429835.html

bzoj 1974: [Sdoi2010]代码拍卖会相关推荐

  1. SDOI2010 代码拍卖会

    SDOI2010 代码拍卖会 题意: 题目传送门 题解: 看完题目之后,第一反应应该就是数位\(Dp\)了,但是考虑到\(N\)非常的大,我们需要考虑另一种方法.注意到这个满足条件的数字的每一位都大于 ...

  2. BZOJ 1974 [Sdoi2010]auction 代码拍卖会 | 51nod 1261 上升数

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1974 http://www.51nod.com/onlineJudge/questionCo ...

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

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

  4. bzoj1974 [Sdoi2010]代码拍卖会 循环+背包

    一般这种计数题就两个套路:找到倍数然后删除不合法的   找到合法的然后删除不是倍数的 如果先找倍数,那不合法的数位置和倍数没有直接关系 这个题是要先找合法的 然后删除不是倍数的 首先这个合法的数找的方 ...

  5. [BZOJ1974][Sdoi2010]auction 代码拍卖会(dp+组合数学)

    Address https://www.lydsy.com/JudgeOnline/problem.php?id=1974 Solution 看上去是一个显然的数位 dp ,但是看到 N≤1018N≤ ...

  6. BZOJ 1923: [Sdoi2010]外星千足虫

    1923: [Sdoi2010]外星千足虫 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 921  Solved: 592 [Submit][Stat ...

  7. [Luogu P2447] [BZOJ 1923] [SDOI2010]外星千足虫

    洛谷传送门 BZOJ传送门 航空航天局(NASA)研制发射,行经火星.金星.土卫六.木卫二.谷神星."张衡星"等232323颗太阳系星球,并最终在小行星"杰森星" ...

  8. BZOJ 1924 [Sdoi2010]所驼门王的宝藏

    Description Input Output Sample Input 题解: 水题,但还是打表过的-- 这个题目,我们显然可以对关键点进行加边.我就是因为加边加太多了才MLE的,当然对于1,2这 ...

  9. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

最新文章

  1. 祝贺黑龙江馆正式入驻波特城暨龙商龙企龙品走向全球化启动仪式圆满成功
  2. python垃圾回收离职_谈谈python垃圾回收机制
  3. Linux笔记——linux下的语音合成系统
  4. c:线性表的链式表示
  5. AJAX应用和传统Web应用有什么不同
  6. scrum回顾_3步开好回顾会 | IDCF FDCC认证学员作品
  7. 倍增LCA code[vs]1036商务旅行
  8. Docker安装Zookeeper并进行操作
  9. 运用EL表达式进行复杂比较(在JSTL中调用函数)
  10. oracle自定义长度异常,Oracle 自定义wmsys.wm_concat 避免长度限制
  11. java中this关键字
  12. 深入理解Java虚拟机:垃圾收集器与内存分配策略
  13. 60. MySQLi 扩展拾遗
  14. JavaScript实现监听移动端上下左右滑动事件
  15. js双击事件条件触发_js页面触发chargeRequest事件和Nginx获取日志信息
  16. 关于CAN APE的使用一些记录
  17. 电动自行车的2020:红利、分化、意外、质疑
  18. 蜂鸟处理器+OV5640摄像头模块开发
  19. 关于PMP考试的流程,很实用
  20. 2012年8月26日

热门文章

  1. ASP.NET企业开发框架IsLine FrameWork系列之八--AppLogProvider日志框架(下)
  2. mysql state_MySQL进程常见的State【转】
  3. 2014年值得关注的10个开源项目 上
  4. Java 8 Stream API详解
  5. Delphi格式化函数Format FormatDateTime和FormatFloat
  6. toj 4597 字符识别?
  7. E. 数好多好多猴(南阳理工oj—21新生第二场招新赛)
  8. Android和Linux kernel发展史
  9. mysql exporter_mysql exporter
  10. wordpress php执行短代码_PHP 8.0发布日期和PHP中JIT的状态