题目描述

给出一个整数 n (n<1030)和 k 个变换规则 (k < 15) 。

规则:

一位数可变换成另一个一位数:

规则的右部不能为零。

例如:n = 234 。有规则( k=2 ):

2-> 5
3-> 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数):

234
534
264
564

共44 种不同的产生数

问题:

给出一个整数 n 和 k 个规则。

求出:

经过任意次的变换( 0 次或多次),能产生出多少个不同整数。

仅要求输出个数。

思路

floyd+高精度,用floyd求出每个数字可以变成多少种数字,根据乘法原理乘起来]

#include <iostream>
#include <string>
using namespace std;
string str;
int k,vis[][],f[],num[];
inline void floyd() { //弗洛伊德
for (int k = ;k <= ;k++)
for (int i = ;i <= ;i++)
for (int j = ;j <= ;j++) vis[i][j] = vis[i][j] || (vis[i][k] && vis[k][j]);
}
int main (){
ios::sync_with_stdio(false);
cin >> str >> k;
while (k--) {
int a,b;
cin >> a >> b;
vis[a][b] = true; //a可以变成b
}
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]++; //求出i可以变成多少种数字
int len = ; num[] = ;
for (int i = ;i < (int)str.length();i++) { //高精度
for (int j = ;j <= ;j++) num[j] *= f[str[i]-''];
for (int j = ;j <= ;j++)
if (num[j] >= ) { //进位
num[j+] += num[j]/;
num[j] %= ;
}
while (num[len]) len++; //求出长度
}
for (int i = len-;i >= ;i--) cout << num[i]; //输出
return ;
}

  

[noip2002] 产生数的更多相关文章

  1. cogs 50. [NOIP2002] 选数

    50. [NOIP2002] 选数 ★   输入文件:choose.in   输出文件:choose.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]: 已知 n 个整数 ...

  2. NOIP2002pj产生数[floyd 高精度]

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

  3. NOIP 2002 产生数

    洛谷 P1037 产生数 https://www.luogu.org/problemnew/show/P1037 JDOJ 1298: [NOIP2002]产生数 T3 https://neooj.c ...

  4. NOIP 2002 选数

    洛谷 P1036 选数 洛谷传送门 JDOJ 1297: [NOIP2002]选数 T2 JDOJ传送门 Description ​ 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k< ...

  5. 选数(NOIP2002)

    题目链接:选数 这一题水过去就行了,我们这里用next_permutation去生成各种排列,有一个注意点,我会在代码中标注. #include<bits/stdc++.h> using ...

  6. 洛谷P1036 [NOIP2002 普及组] 选数 (搜索)

    n个数中选取k个数,判断这k个数的和是否为质数. 在dfs函数中的状态有:选了几个数,选的数的和,上一个选的数的位置: 试除法判断素数即可: 1 #include<bits/stdc++.h&g ...

  7. NOIP2002普及组复赛B 选数

    题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...

  8. NOIP2002普及T3【产生数】

    做完发现居然没人用map搞映射特意来补充一发 很容易看出这是一道搜索题考虑搜索方案,如果按字符串转移,必须存储每种状态,空间复杂度明显会爆炸观察到每一位之间是互不影响的 考虑使用乘法原理搜索出每一位的 ...

  9. 递推2--过河卒(Noip2002)

    递推2--过河卒(Noip2002) 一.心得 写出递推公式就OK了,具体编程还是很简单的 二.题目及分析 过河卒(NOIp2002) [问题描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的 ...

随机推荐

  1. Java中lambda(λ)表达式的语法

    举一个排序的例子,我们传入代码来检查一个字符串是否比另一个字符串短.这里要计算: first.length() - second.length() first和second是什么?他们都是字符串.Ja ...

  2. Python之threading初探

    threading库主要用于基于线程的并行,核心就是Thread类   class threading.Thread(group=None, target=None, name=None, args= ...

  3. SQL语法入门

    SQL语句概述 ·SQL定义:是一种特定目的编程语言,用于管理关系数据库 ·GaussDB T是一种关系数据库,SQL语句包括 1.DDL 数据定义语言,用于定义或修改数据库中的对象(表,视图,序列, ...

  4. 还不懂mysql的undo log和mvcc?算我输!

    最近一直没啥时间写点东西,坚持分享真的好难,也不知道该分享点啥,正好有人要问我这些东西,所以腾出点时间,写一下这个主题.同样本篇可以给读者承诺,听不懂或者没收获算我输,哈哈! 众所周知,mysql中读 ...

  5. python3 httpConnection——post请求

    #coding=utf-8 import http.clientimport urllib.parse #与服务器建立链接url = 'code.ali.cn:80' conn = http.clie ...

  6. Html5 表单元素基础

    表单元素 1.定义: 表单是提供让读者在网页上输入,勾选和选取数据,以便提交给服务器数据库的工具.(邮箱注册,用户登录,调查问卷等) 2.表单元素(下拉框,输入框……) 3.表单主结构: <fo ...

  7. .Net微服务实战之CI/CD

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) 相关源码:https://github.com/S ...

  8. webpack 4.x版本手动配置

    运行 npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在src目录下创建 index.html mani.js文件如果后期使用entry打包,这里可以手动创 ...

  9. 【转载】 jmeter 命令行模式(非GUI)运行脚本,察看结果树结果为空,解决办法

    转载地址:https://www.cnblogs.com/canglongdao/p/12636403.html jmeter 命令行模式(非GUI)运行脚本,察看结果树结果为空,解决办法: jmet ...

  10. pandas 几个重要知识点

    将 NaN 替换成某一数值 使用 fillna dataframe.fillna(value = 'xxx',inplace=True) 删除某一个值 使用 drop dataframe.drop(1 ...