洛谷 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次或多次),能产生出多少个不同整数。
仅要求输出个数。
输入输出格式
输入格式:
键盘输入,格式为:
n k
x1 y1
x2 y2
... ...
xn yn
输出格式:
屏幕输出,格式为:
1个整数(满足条件的个数):
输入输出样例
234 2
2 5
3 6
4
解题思路:
高精度+Floyd,先用Floyd求每一个数有几种变换可能,再将每一位的可能数相乘,因为数据过大,需要用高精度.
AC代码:
#include<iostream> using namespace std; string n;
int k,f[],num[];
bool vis[][];//vis[i][j] = 1表示i可以变换到j void floyd() {//求出所有数是否能变换为其他数
for(int p = ;p <= ; p++)
for(int i = ;i <= ; i++)
for(int j = ;j <= ; j++)
vis[i][j] = vis[i][j] || (vis[i][p] && vis[p][j]);
} int main()
{
ios::sync_with_stdio(false);
cin >> n >> k;
while(k--) {
int a,b;
cin >> a >> b;
vis[a][b] = true;
}
for(int i = ;i <= ; i++) vis[i][i] = true;//每个数都可以从自己变到自己
floyd();
for(int i = ;i <= ; i++)
for(int j = ;j <= ; j++)
if(vis[i][j]) f[i]++;//记录每一个数有几种变换可能
int len = ;
num[] = ;
for(int i = ;i < (int)n.length(); i++) {//高精度过程
for(int j = ;j <= ; j++) num[j] *= f[n[i]-''];
for(int j = ;j <= ; j++) {
num[j+] += num[j] / ;
num[j] %= ;
}
while(num[len]) len++;
}
for(int i = len - ;i >= ; i--) cout << num[i];
return ;
}
//NOIP普及 2002 T3
洛谷 P1037 产生数的更多相关文章
- 洛谷P1037 产生数 题解 搜索
题目链接:https://www.luogu.com.cn/problem/P1037 题目描述 给出一个整数 \(n(n<10^{30})\) 和 \(k\) 个变换规则 \((k \le 1 ...
- 洛谷P1102 A-B数对
洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 洛谷 P1392 取数
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...
- 洛谷——P2421 A-B数对(增强版)
题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...
- 洛谷 P5206 - [WC2019]数树(集合反演+NTT)
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...
- 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)
洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...
- 【洛谷P1037】 产生数
产生数 题目链接 本着“水题不可大做”的原则,我直接字符串hash+爆搜,成功爆栈.. 我们发现,依次搜索每一位能取到的数字个数,最后乘起来即可(乘法原理) 然后又爆了一个点.. long long存 ...
- [洛谷P1037][题解]产生数
这道题的关键是利用Floyd算法的性质求转换方案,算是Floyd的一个变形,具体可以看代码. 题目 #include<bits/stdc++.h> using namespace std; ...
随机推荐
- codeforces 359A
#include<stdio.h> #define N 60 int map[N][N]; int main() { int n,m,i,j,flag; while(scanf(&qu ...
- 选学霸(codevs 3372)
题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同 ...
- 【BZOJ4591】超能粒子炮·改(Lucas定理,组合计数)
题意: 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...
- DELPHI IDFTP
FTP是一个标准协议,它是在计算机和网络之间交换文件的最简单的方法. FTP也是应用TCP/IP协议的应用协议标准.FTP通常于将作者的文件上传至服务器,或从服务器上下传文件的一种普遍的使用方式作为用 ...
- Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用
一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后 ...
- hibernate之多对一单向关联
一个工作组(Group)里能够有多个用户(User),一个User仅仅属于一个Group,这是典型的多对一的关系. 在多对一的关系中正确的数据库设计是在多的这方(在这里是User这方)加一个Group ...
- [Debug] Node-sass
Meet some problem when trying to install node-sass on windwos. Company has proxy settings, need to r ...
- ios学习8_KVC和字典转模型
Key Value Coding是cocoa的一个标准组成部分,它能让我们能够通过name(key)的方式訪问属性,某些情况下极大地简化了代码.可称之为cocoa的大招. 例如以下的样例: 使用KVC ...
- LVS 负载均衡 (VS/DR模式 与 VS/TUN 模式)
一.VS/DR模式 ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP. ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC ...
- 水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。
用 CrystalReportViewer1 控件在asp.net的网页上显示报表,假设做报表时调用数据表数据的方式调用是能够成功的.但报表是用存储过程获取数据方式会出现下面错误: 找不到表'RptO ...