codevs 1009 产生数 Floyd 解题报告
来源:互联网 发布:matlab 内置函数源码 编辑:程序博客网 时间:2024/06/14 09:32
题目描述 Description
给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。
规则:
一位数可变换成另一个一位数:
规则的右部不能为零。
例如:n=234。有规则(k=2):
2-> 5
3-> 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数):
234
534
264
564
共 4 种不同的产生数
问题:
给出一个整数 n 和 k 个规则。
求出:
经过任意次的变换(0次或多次),能产生出多少个不同整数。 仅要求输出个数。
输入描述 Input Description
键盘输人,格式为:
n k
x1 y1
x2 y2
… …
xn yn
输出描述 Output Description
屏幕输出,格式为:
一个整数(满足条件的个数)
样例输入 Sample Input
234 2
2 5
3 6
样例输出 Sample Output
4
思路
可以转化的就连边。
代码
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=35;int dis[N][N],m,k,x,y,num=1;char n[N];long long ans=1;void floyd(){ for (int k=0;k<=9;k++) for (int i=0;i<=9;i++) for (int j=0;j<=9;j++) if (i!=k&&i!=j&&k!=j) if (dis[i][k]&&dis[k][j]) dis[i][j]=1; return ;}int main(){ scanf("%s",n+1); scanf("%d",&k); int len=strlen(n+1); for (int i=1;i<=k;i++) { scanf("%d%d",&x,&y); dis[x][y]=1; } floyd(); for (int i=1;i<=len;i++) { int now=n[i]-'0',num=1; for (int j=0;j<=9;j++) if (now!=j&&dis[now][j]) num++; ans*=num; } printf("%lld\n",ans); return 0;}
阅读全文
0 0
- codevs 1009 产生数 Floyd 解题报告
- codevs 1009 产生数 floyd算法
- codevs 1009 产生数 题解报告
- codevs 1079 回家 Floyd 解题报告
- codevs 1024 一塔湖图 floyd 解题报告
- codevs 1020 孪生蜘蛛 floyd 解题报告
- Codevs 1009 产生数
- 【codevs 1009】产生数
- Codevs 1009 产生数
- Codevs 1008 选数 解题报告
- codevs 1394 数字串 贪心 解题报告
- codevs 2602 最短路径问题 Floyd 解题报告
- codevs 2800 送外卖 floyd+状压DP 解题报告
- 【Floyd传递闭包】[CODEVS]p1009 产生数
- codevs 2147 数星星 离散化?解题报告
- [CODEVS]数据结构系列 解题报告
- CODEVS 1022 覆盖 解题报告
- [codevs 1515]跳 【解题报告】
- < 笔记 > Python
- JS数据类型
- 10-03 位运算
- 【福分系统】 LINQ to Entities 不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。
- Spring Integration概述
- codevs 1009 产生数 Floyd 解题报告
- 线程的概念?使用线程的好处?及线程与进程的区别?
- Qt中登录对话框的开发
- metasploit常用命令
- Android开发之BroadcastReceiver(一)
- 剑指offer 从上到下打印二叉树
- CodeVS1009[NOIP2002(普及组)] 产生数【Floyd】
- 基础的Linux命令的用法
- RxJava详解