【洛谷】【计数原理+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 ...
随机推荐
- HDU 1079 Calendar Game(规律博弈)
题目链接:https://cn.vjudge.net/problem/HDU-1079 题目: Adam and Eve enter this year’s ACM International Col ...
- SpringMVC+jquery.uploadify 上传文件
前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在C ...
- SPI 驱动框架
SPI 驱动框架 1. 枚举过程 drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to ...
- win10 关闭自动更新
方法一 : 利用组策略关闭win10自动更新的步骤如下:1.按win+R打开“运行”,输入“gpedit.msc”,按下回车. 2.找到“计算机配置”→““管理模板”→“Windows 组件”→“Wi ...
- Web Service 与WebAPI 的区别
Web Servise: web service 是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作系统平台,就是说服务器端程序采用Java编写,客户端程序则可以采用其他编程语言 ...
- C# MVC 用户登录状态判断
来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类AuthenticationAttribute ,代码如下: ...
- Python 实现的 12306抢票脚本
Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...
- hadoop之 hadoop能为企业做什么?
hadoop是什么? Hadoop是一个开源的框架,可编写和运行分不是应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式.Hadoop=HDFS( ...
- 1788:Pell数列
1788:Pell数列 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2 ...
- 2017-12-02 编程语言试验之Antlr4+JavaScript实现"圈4"
参考: ANTLR4: Making a compiler with the JavaScript runtime 演示效果虽弱, 还是先上图吧: 在线演示: 地址. 源码库: program-in- ...