2014.9.13模拟赛【数位和乘积】

数位和乘积(digit.cpp/c/pas)

【题目描述】

一个数字的数位和乘积为其各位数字的乘积。求所有的N位数中有多少个数的数位和乘积恰好为K。请注意,这里的N位数是可以有前导零的。比如01,02视为二位数,但是他们的数位和乘积都是0。

 

【输入格式】

一行两个整数N,K

 

【输出格式】

一个行一个整数表示结果。

 

【样例输入】

2 3

【样例输出】

2

【样例输入2】

2 0

【样例输出2】

19

 

【数据范围】

对于20%:N <= 6。

对于50%:N<=16

存在另外30%:K=0。

对于100%:N <= 50,0 <= K <= 10^9。


……这题要分类讨论

1、k==0时,答案是n位数中至少有一个的方案数。根据容斥原理就是总的方案数-n位数中一个0也没有的方案数,即10^n-9^n。因为n<=50,要高精度乘、减

2、k!=0时,先分解质因数。如果有2、3、5、7以外的质因数,肯定无解。因为k是各位乘起来的积,不可能出现有一位是11、13之类

然后保存2、3、5、7的指数(设为m2、m3、m5、m7)

令f[i][j][k][l][m]表示前i位凑出j个2、k个3、l个5、m个7的方案数

然后转移就是枚举第i位是1到9的转移(好麻烦啊不想写在这里了……看我代码)

根据计算因为k<=10e,所以只要开数组f[55][30][20][14][12]就差不多了

这样每个f依然要高精度……MLE啦……所以还要滚动数组或者像一维背包dp的做法一样倒着for就可以省掉第一维

(哇啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊因为我的高精数组清0刚好少算一位就wa了只有90不开心啊啊啊啊啊啊啊啊啊啊)

#include<cstdio>
#include<cstring>
#define mx 50
#define LL long long
struct gaojing{int len;int a[mx+10];
}f[30][20][14][12]; 
int n,k;
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
inline void set0(gaojing &s)
{s.len=0;for (int i=1;i<mx+5;i++)s.a[i]=0;
}
inline void put(gaojing a)
{for (int i=a.len;i>=1;i--)printf("%d",a.a[i]);printf("\n");
}
inline void addi(gaojing a,gaojing b,gaojing &c)
{set0(c);int maxlen=max(a.len,b.len);  for (int i=1;i<=maxlen;i++)  {  c.a[i]=c.a[i]+a.a[i]+b.a[i];  if (c.a[i]>=10)  {  c.a[i+1]+=c.a[i]/10;c.a[i]%=10;}}  c.len=maxlen+1;  while (!c.a[c.len]&&c.len>1) c.len--;
}
inline void jian(gaojing a,gaojing b,gaojing &c)
{set0(c);for (int i=1;i<=b.len;i++){c.a[i]=a.a[i]-b.a[i];if (c.a[i]<0){c.a[i]+=10;int now=i+1;while (!a.a[now]){a.a[now]=9;now++;}a.a[now]--;}}for (int i=b.len+1;i<=a.len;i++)c.a[i]=a.a[i];c.len=a.len;while (c.a[c.len]==0&&c.len>1)c.len--;
}
inline void mult(gaojing a,gaojing b,gaojing &c)
{set0(c);for(int i=1;i<=a.len;i++)for (int j=1;j<=b.len;j++)c.a[i+j-1]+=a.a[i]*b.a[j];int mxlen=a.len+b.len+3;for (int i=1;i<=mxlen;i++){c.a[i+1]+=c.a[i]/10;c.a[i]%=10;}while (c.a[mxlen]==0)mxlen--;c.len=mxlen;
}
const int prime[5]={0,2,3,5,7};
int num[5];
int main()
{freopen("digit.in","r",stdin);freopen("digit.out","w",stdout);scanf("%d%d",&n,&k);if (k==0)//若k=0,方案数为10^n-9^n {gaojing sum;set0(sum);gaojing tomul;set0(tomul);gaojing decs;set0(decs);sum.len=1;sum.a[1]=1;tomul.len=1;tomul.a[1]=9;decs.len=n+1;decs.a[n+1]=1;for(int i=1;i<=n;i++)mult(sum,tomul,sum);jian(decs,sum,sum);put(sum);return 0;}for (int i=1;i<=4;i++)while (k%prime[i]==0){k/=prime[i];num[i]++;}if (k!=1){printf("0");return 0;}f[0][0][0][0].a[1]=1;f[0][0][0][0].len=1;for (int i=0;i<=num[1];i++)for (int j=0;j<=num[2];j++)for (int k=0;k<=num[3];k++)for (int l=0;l<=num[4];l++)f[i][j][k][l].len=1;for (int i=1;i<=n;i++){int m2=min(num[1],3*i);int m3=min(num[2],2*i);int m5=min(num[3],i);int m7=min(num[4],i);for (int j=m2;j>=0;j--)for (int k=m3;k>=0;k--)for (int l=m5;l>=0;l--)for (int m=m7;m>=0;m--){if (j>=1)addi(f[j][k][l][m],f[j-1][k]  [l]  [m]  ,f[j][k][l][m]);//2if (k>=1)addi(f[j][k][l][m],f[j]  [k-1][l]  [m]  ,f[j][k][l][m]);//3if (j>=2)addi(f[j][k][l][m],f[j-2][k]  [l]  [m]  ,f[j][k][l][m]);//4if (l>=1)addi(f[j][k][l][m],f[j]  [k]  [l-1][m]  ,f[j][k][l][m]);//5if (j&&k)addi(f[j][k][l][m],f[j-1][k-1][l]  [m]  ,f[j][k][l][m]);//6if (m>=1)addi(f[j][k][l][m],f[j]  [k]  [l]  [m-1],f[j][k][l][m]);//7if (j>=3)addi(f[j][k][l][m],f[j-3][k]  [l]  [m]  ,f[j][k][l][m]);//8if (k>=2)addi(f[j][k][l][m],f[j]  [k-2][l]  [m]  ,f[j][k][l][m]);//9}}put(f[num[1]][num[2]][num[3]][num[4]]);
}

  

转载于:https://www.cnblogs.com/zhber/p/4035998.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中vector函数大全,vector :: empty()函数,以及C ++ STL中的示例

C vector :: empty()函数矢量::空()是一个库函数“载体”头&#xff0c;它是用来检查给定的矢量是否是一个空的载体或没有&#xff0c;它返回一个真&#xff0c;如果矢量大小为0&#xff0c;否则返回假。注意&#xff1a;要使用向量&#xff0c;请包含标头。vector :: empty()…

【Modern OpenGL】OpenGL简介

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址: http://blog.csdn.net/aganlengzi/article/details/50354162 OpenGL 在真正开始我们的探索之旅时&…

c语言课程设计修改订单流程图,C语言课程设计————写下流程图! 谢谢

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼printf("---You have success read data from file!!!---\n");return h; /*返回头指针*/}/*追加记录到文件*/void append(){FILE *fp; /*定义指向文件的指针*/STUDENT *info; /*新记录指针*/int s1,i;char infile[10]; /…

微信公众账户模拟登陆后的一系列操作

<?php header("content-type:text/html;charsetutf-8");/*** wx_mass* * 完成微信公众账户模拟登陆后的一系列操作* mass($content) 调用微信群发接口&#xff0c;群发文本信息* getUserList($page,$pagesize,$group) 获取用户信息* * 群发demo* * $userarray(ac…

【Modern OpenGL】纹理 Textures

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50421006 纹理 Textures 为了使我们创建的…

华北水利水电C 语言实验11,华北水利水电大学C语言实验11.doc

华北水利水电大学C语言实验11C语言程序设计实验报告实验11、结构体程序设计班级 2013156 学号 201315613 姓名 吴浩【实验目的】(1)掌握结构体类型的概念、定义和使用&#xff1b;(2)掌握结构体数组、结构体指针的定义和使用&#xff1b;【实验内容及步骤】1、输入5位同学的一组…

Android Activity无法启动。

在正常情况上&#xff0c;这是由于没的在AndroidManifest.xml中进行注册引起的。转载于:https://www.cnblogs.com/zhaojianwei/p/3971238.html

C语言依次显示图片,c语言能显示图片吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/* Svga64k.bgi 测试文件 */#include "graphics.h"#include "Svga256.h"#include "stdio.h"#include "fcntl.h"#include "malloc.h"#include "io.h"int huge Return_…

HDU 2296 Ring AC自动机 + DP

题意&#xff1a;给你n个模式串&#xff0c;每个模式串有一个得分&#xff0c;让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的。 解题思路&#xff1a; AC自动机 DP &#xff0c; 不过要输出字典序列最小&#xff0c;多开一个 一个三维字符串来辅助二维DP&…

【Modern OpenGL】转换 Transformations

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50421159 转换 Transformations 我们已经…

android画布demo,Android开发画板demo前奏

目的完成画板demo的前期步骤相关技术、及其使用xml配置文件&#xff1a;创建SeekBar比较简单&#xff0c;但是不足之处在于当实现横屏的时候就比较麻烦代码创建&#xff1a;代码创建SeekBar比较简单&#xff0c;能够很好地实现横竖屏切换。2、创建Slider类继承于View初始化线条…

网站开发和企业级开发有什么区别?

经常看到Web开发、网站开发、企业级开发&#xff0c;以前很难分清楚它们之前有什么不同&#xff1f;以前也有个说法&#xff1a;Java比较适合企业级开发。现在经验增加了一点&#xff0c;谈谈我的一点看法。Web开发&#xff1a;www访问的网页、网站&#xff0c;BS模式。 网站…

android studio adb 命令行,Android Studio如何配置adb以及经常使用命令

用Android Studio一年多了&#xff0c;都没有使用其调试adb,今天就分享adb配置的方法&#xff0c;分享给你们.android直接打开电脑-属性-高级配置-环境变量。web这里我用图示范给你们&#xff1a;sql这样经常使用adb就配置成功。shell紧接着还有平时经常使用的adb命令&#xff…

【Modern OpenGL】坐标系统 Coordinate Systems

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50448453 坐标系统 Coordinate Systems 在…

cocos2d-x 旅程開始--(实现单击与长按)

小菜鸟一枚&#xff0c;学习cocos2d-x已经有一段时间了&#xff0c;感觉进度非常慢那&#xff0c;CSDN也再次拾了起来。近期自己还在学习做小游戏&#xff0c;跟着前辈做了《忍者打怪物》的小游戏&#xff0c;又学习了瓦片游戏《吃西瓜》&#xff0c;打算自个做个坦克大战&…

Android判断view在屏幕可见,如何检查TextView是否在Android可见屏幕内

我想知道我的textview是否在可见的屏幕区域内.但似乎没有什么对我有用.我以前检查过的代码是Rect rect new Rect();//textview intialized in onCreate as text1text1.getHitRect(rect);text1.measure(0, 0);//layout is the parent layout (linear) in which i am adding the…

【Modern OpenGL】摄像机系统 Camera

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a;http://blog.csdn.net/aganlengzi/article/details/50448469 摄像机 Camera 在前面的教程中…

jQuery操作cookie

First of all&#xff0c;引用jq的一个插件jquery.cookie.js 1<span style"font-size:14px">$.cookie(’the_cookie’, ‘the_value’); //新建cookie2 $.cookie(’the_cookie’, null); //删除一个cookie</span><span style"font-size:14px&quo…

linux ntp时间同步

一、搭建时间同步服务器1、编译安装ntp serverrpm -qa | grep ntp若没有找到&#xff0c;则说明没有安装ntp包&#xff0c;从光盘上找到ntp包&#xff0c;使用rpm -Uvh ntp***.rpm进行安装2、修改ntp.conf配置文件vi /etc/ntp.conf①、第一种配置&#xff1a;允许任何IP的客户机…