链接:https://ac.nowcoder.com/acm/contest/1077/C
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
给出一个整数 n(n<1030) 和 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

/*
一个数变为另一个数途径可能很多,同时一个数可以变成多个数。
直接暴力搜索会TLE,此时要换一种思路,用组合数学来做:
ans = 每个数可以变成其他数的个数 的乘积。
处理每个数的个数,可以抽象成图中两点是否可达,
用多源最短路Floyd来处理。
0–9,10个数,极端情况下,每个数可以变成的
9个数,ans 可达9^10,所以计算答案还要高精度计算,
用数组模拟就好。

*/

AC_code:

#include <iostream>
#include <string.h>
using namespace std;
char n[35];
int vis[15][15];
int ans[100],num[15];
int main()
{int k;cin>>n>>k;int x,y;for(int i = 0; i < k; i++){cin>>x>>y;vis[x][y] = 1;}for(int i = 0; i <= 9; i++){vis[i][i] = 1;}//floydfor(int k = 1; k <= 9; k++){for(int i = 0; i <= 9; i++){for(int j = 1; j <= 9; j++){if(vis[i][k]&&vis[k][j]){vis[i][j] = 1;}}}}for(int i = 0; i <= 9; i++){for(int j = 0; j <= 9; j++){if(vis[i][j])num[i]++;}}//高精度计算int length = strlen(n);ans[0] = 1;for(int i = 0; i < length; i++){int x = 0,t;for(int j = 0; j < 100; j++){t = ans[j]*num[n[i]-'0']+ x;ans[j] = t % 10;x = t / 10;}}int s = 99;while(ans[s]==0) s--;for(int i = s; i >= 0; i--){cout<<ans[i];}cout<<endl;return 0;
}

产生数(floyd+高精度计算)相关推荐

  1. 产生数(Floyd)

    Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规则(k=2 ...

  2. 蓝桥杯 ADV-206 算法提高 不大的数

    问题描述 在当今的大数据时代,超大数的高精度计算已经成为众多领域的热门研究之一.现在T校也想在此领域有所造诣已造福于全社会,然而由于时间有限,所以短时间内难以找出大数计算的通用算法,于是学校找到了同学 ...

  3. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

  4. 求高精度幂(java)

    求高精度幂 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题.  现在要你 ...

  5. 算法练习——ACM_1001_Exponentiation

    求高精度幂 Time Limit: 500MS           Memory Limit: 10000K Total Submissions: 126980           Accepted: ...

  6. POJ 1001 Exponentiation C++解题报告 JAVA解题报告

    求高精度幂 Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 126980   Accepted: 30980 Descripti ...

  7. 关于浮点数的误差理解

    拜读了Cleve Moler写的博客<Bank Format and Metric Socket Wrenches>,对浮点数又有了进一步的理解.原文的链接地址为 http://blogs ...

  8. NYOJ 155 求高精度幂

    求高精度幂 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...

  9. 从0开始详解 Johnson 全源最短路(P5905 【模板】Johnson 全源最短路)

    问题引入:([模板]Johnson 全源最短路 - 洛谷) ps:(如果不想 情景带入 请直接转跳到Johnson算法详解) 目录 问题引入:([模板]Johnson 全源最短路 - 洛谷) 题目描述 ...

最新文章

  1. 用漫画了解 Linux 内核到底长啥样!
  2. Redis如何淘汰过期的keys
  3. 【转载】SQL update select结合语句详解及应用
  4. registerModulePath
  5. linux 网络状态图,linux的网络连接状态
  6. PNG免扣苹果IPHONE手机模型样机,让一切简单一点!
  7. C#开源项目一览表[转](包含国内和国外)
  8. 33.错误处理(2)
  9. halcon-高速下载
  10. Baxter 机器人仿真软件安装及演示
  11. 中文论文检索证明怎么开_SCI论文检索后收录证明怎么开?
  12. c语言闰月的计算方法,2017 清宫图闰月的计算方法
  13. win10硬盘锁怎么解除_win10系统下bitlocker给硬盘加密后怎么解锁
  14. Exploratory Social Network Analysis with Pajek(第三版)11
  15. 算法之狄克斯特拉算法
  16. 华为荣耀屏鸿蒙,荣耀智慧屏:华为鸿蒙迈出的第一步
  17. 十一长假我肝了这本超硬核PDF,现决定开源!!
  18. UBUNTU 16.04无线网卡驱动
  19. 身份证正则 身份证正则表达式
  20. 撤县设区,就能过城里人的生活了?

热门文章

  1. c 正则表达式替换html,正则表达式替换html元素属性的方法
  2. java输入输出实验报告_JAVA实验报告(河北工业大学)
  3. uniapp 单元测试_单元测试不够验收测试凑,编写验收测试有什么技巧?
  4. linux 根据进程号查看对应的进程
  5. 助力小白常见JS逆向乱杀喂饭教程——Url加密
  6. 终于看腻了黄色!让它五彩斑斓起来!
  7. 【好消息】Python和Excel终于可以互通了!!
  8. 杀手级 AI 补代码工具问世,支持 23 种语言及 5 种主流编辑器,程序员沸腾了...
  9. arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践
  10. python的learn_Python_learn_1day