【洛谷】【计数原理+Floyed】P1037 产生数
【题目描述:】
给出一个整数 n \((n<10^{30})\) 和 k 个变换规则\((k≤15)\) 。
规则:
一位数可变换成另一个一位数:
规则的右部不能为零。
例如: n=234 。有规则( k=2 ):
2 -> 5
3 -> 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数):
234
534
264
564
共 4 种不同的产生数
【问题:】
给出一个整数 n 和 k 个规则。
求出:
经过任意次的变换( 0 次或多次),能产生出多少个不同整数。
仅要求输出个数。
[算法分析:]
读入一个整数a,每一位分别为\(a_1\), \(a_2\), \(a_3\),..., \(a_n\),
设置一个数组num,num[i]表示数字i有多少种变换,
于是答案为\(num[a_1] * num[a_2] * ... * num[a_n]\)。
写出来一看,发现在
1234 3
2 3
3 2
3 5
这组数据下的结果是错误的,
2变成3后,可以继续变成5,所以2能变成的值有两个
如何统计?
f[i][j]=1 表示数字i能变成数字j,对f数组做一遍Floyed,再遍历一遍f数组即可统计。
[Code:]
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int k;
long long num1[10];
bool a[10][10];
char n[31], ans[205], num[10][101];
int aa[205], b[205], c[205];
char ss[205];
//需用高精度
void Mul(char s1[], char s2[]) {
memset(ss, 0, sizeof(ss));
memset(aa, 0, sizeof(aa));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
int lena=strlen(s1), lenb=strlen(s2);
for(int i=0; i<lena; i++) aa[i] = s1[lena-i-1]-'0';
for(int i=0; i<lenb; i++) b[i] = s2[lenb-i-1]-'0';
for(int i=0; i<lena; i++)
for(int j=0; j<lenb; j++) {
c[i+j] += aa[i]*b[j];
c[i+j+1] += c[i+j]/10;
c[i+j] %= 10;
}
int lenc = lena+lenb;
while(lenc>1 && c[lenc-1]==0) lenc--;
for(int i=lenc-1; i>=0; i--)
ss[lenc-i-1] = c[i] + '0';
}
int main() {
for(int i=0; i<=9; ++i) num1[i] = 1;
scanf("%s%d", n, &k);
for(int i=1; i<=k; ++i) {
int x, y;
scanf("%d%d", &x, &y);
a[x][y] = 1;
}
for(int k=0; k<10; ++k)
for(int i=0; i<10; ++i)
for(int j=0; j<10; ++j)
a[i][j] |= (a[i][k] & a[k][j]);
for(int i=0; i<10; ++i)
for(int j=0; j<10; ++j)
if(a[i][j] && i!=j) {
++num1[i];
}
for(int i=0; i<10; ++i)
sprintf(num[i], "%lld", num1[i]);
int l = strlen(n);
ans[0] = '1';
for(int i=0; i<l; ++i) {
Mul(ans,num[n[i]-'0']);
strcpy(ans, ss);
}
cout << ans;
}
【洛谷】【计数原理+Floyed】P1037 产生数的更多相关文章
- 洛谷【P1004】方格取数
浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...
- 洛谷 P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...
- 洛谷P1066 2^k进制数(题解)(递推版)
https://www.luogu.org/problemnew/show/P1066(题目传送) (题解)https://www.luogu.org/problemnew/solution/P106 ...
- 洛谷1066 2^k进制数
原题链接 大力猜结论竟然猜对了.. 对于一对\(k,w\),我们可以把\(w\)位划分成\(k\)位一段的形式,每一段就是转换成十进制后的一位,这个从题面的解释中应该可以理解. 先不考虑可能多出(即剩 ...
- 【洛谷】4317:花神的数论题【数位DP】
P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...
- BZOJ4299 & CC FRBSUM:ForbiddenSum & BZOJ4408 & 洛谷4587 & LOJ2174:[FJOI2016]神秘数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4299 https://www.lydsy.com/JudgeOnline/problem.php? ...
- 洛谷P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...
- 洛谷P1976 鸡蛋饼(Catalan数)
P1976 鸡蛋饼 题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆 ...
- 洛谷P1722 矩阵 II(Catalan数)
P1722 矩阵 II 题目背景 usqwedf 改编系列题. 题目描述 如果你在百忙之中抽空看题,请自动跳到第六行. 众所周知,在中国古代算筹中,红为正,黑为负…… 给定一个1*(2n)的矩阵(us ...
随机推荐
- ThreadPoolExecutor代码解析
派生体系 java.util.concurrent ThreadPoolExecutor AbstractExecutorService ExecutorService Executor 这个类是 ...
- FFmpeg数据结构AVPacket
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10410320.html 本文基于FFmpeg 4.1版本. 1. 数据结构定义 stru ...
- MAC ACL、RACL和VACL
拓扑结构: 配置IP地址.VLAN及路由: SW1(config)#int range f0/1 - 2SW1(config-if-range)#switchport mode accessSW1(c ...
- VirtualBox centos7扩容
有时候扩容还真不如重新建立一个大硬盘的系统,但是如果你安装了好多东西的话,那还是来扩容一下吧. 查看磁盘格式 在virtualBox中右键点击虚拟机->设置->存储,如 ...
- IDEA乱码解决
设置中encoding都指定为utf-8,完全没用. 最终在java编译的地方找到了解决办法
- 【Spring】15、spring mvc路径匹配原则
Ant path 匹配原则 在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径 ...
- Cylinder Candy(积分)
Cylinder Candy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Edward the confectioner is ...
- Go开发之路 -- Go语言基本语法 - 作业
1. 判断101 - 200之间有多少个素数,并输出所有素数. package main import ( "fmt" ) var count = 0 func prime(a, ...
- Python全栈学习_day001知识点
今日大纲: . 变量. ***** . 常量.** . 注释.*** . 基础数据类型初识(int,str,bool). ***** . 用户输入 input ***** . 流程控制语句if. ** ...
- js之模态对话框
目标效果:点击页面按钮,显示模态对话框,在模态对话框里点击取消关闭模式对话框. 效果如下 实现代码如下: <!DOCTYPE html> <html lang="en&qu ...