1009 产生数 2002年NOIP全国联赛普及组
1009 产生数
2002年NOIP全国联赛普及组
给出一个整数 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
数据范围及提示
Data Size & Hint
思路:
符合变换规则的数可以在变换一次后的新数仍然符合变换规则
所以我们考虑将之转化为一个图论问题
就是考虑从i到j需要经过多少点
经过的点的个数就是可以变换成的数
可是怎么求呢?
用弗洛伊德算法
弗洛伊德是个n^3的动态规划
枚举三个点i,j,k
如果i到j的距离大于i到k加上k到i的距离就会更新i到j的距离
根据这个原理我们可以增加一个计数器
即每更新一次i到j的距离则i的变换数的个数加1
因为n的本身也算是一种排列
所以所有数的变换个数初始为1、
将所有的变换数的个数都求出后
可以通过相乘的积得出总个数
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long ans=,num[];
int n,map[][];
char cur[];
int main()
{
memset(map,/,sizeof(map));
scanf("%s",cur);
scanf("%d",&n);
for(int a,b,i=;i<=n;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=;
}
for(int k=;k<=;k++)
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
if(i!=j&&j!=k&&k!=i)
if(map[i][k]+map[k][j]<map[i][j])
{
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
for(int i=;i<=;i++)
{
num[i]++;
for(int j=;j<=;j++)
{
if(j==i) continue;
if(map[i][j]<) num[i]++;
}
}
for(int i=;i<strlen(cur);i++) ans=(ans*num[(int)(cur[i]-'')]);
cout<<ans<<endl;
return ;
}
1009 产生数 2002年NOIP全国联赛普及组的更多相关文章
- codevs 1009 产生数 2002年NOIP全国联赛普及组 x (内附解析w)
题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规 ...
- 1008 选数 2002年NOIP全国联赛普及组
1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description ...
- 选数 2002年NOIP全国联赛普及组
题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...
- Codevs 1010 过河卒 2002年NOIP全国联赛普及组
1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...
- 1010 过河卒 2002年NOIP全国联赛普及组codevs
1010 过河卒 2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点 ...
- 【动态规划】【记忆化搜索】CODEVS 1010 过河卒 2002年NOIP全国联赛普及组
f(i,j)=f(i-1,j)+f(i,j-1),显然可以暴力递归求解,但是很多重复的状态,所以可以记忆下来. 注意障碍点和边界的特判. #include<cstdio> #include ...
- 1043 方格取数 2000年NOIP全国联赛提高组
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N* ...
- 1099 字串变换 2002年NOIP全国联赛提高组
1099 字串变换 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 已知有 ...
- Codevs 1140 Jam的计数法 2006年NOIP全国联赛普及组
1140 Jam的计数法 2006年NOIP全国联赛普及组 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Jam是个喜欢标 ...
随机推荐
- [CQOI2006]凸多边形(半平面相交)
嘟嘟嘟 本来我要写feng shui这道题的.然后网上都说什么半平面相交,于是我还得现学这个东西,就来刷这道模板题了. 所谓的半平面相交和高中数学的分数规划特别像.比如这道题,把每一条边看成一条有向直 ...
- Java集合源码 -- List列表
List概述 List是一个有序,可重复的集合,可以在List的中间插入和移除元素,根据整数索引访问元素 下图是List集合的框架图 下面是对上图的简单介绍 AbstractCollection: 提 ...
- 【MySQL-123】MySQL8.0.12 安装于Win10
参考blog:MySQL8.0.12 安装及配置 [坑一]输入net start mysql时,MYSQL服务无法启动. 问题:第三步my.ini文件编码错误. 解决方案:https://blog.c ...
- mail发邮件报错 "send-mail: fatal: parameter inet_interfaces: no local interface found for ::1"
发送邮件: [root@itfswelog123]# echo '测试邮件标题' | mail -s "数据库挂啦.挂啦.起床啦 " xx@163.com 出现异常: [r ...
- translate动画实例
<!doctype html> <html lang="en"> <head> <meta name="viewport&quo ...
- PAT——1048. 数字加密
本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10.Q代表11.K代 ...
- HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...
- 学习使用 ARM 的 math 库,据说 速度比C标准库 自带的 快 几十倍 到几百倍
1.首先 添加 库 到 工程 ,路径 如下 C:\Keil\ARM\CMSIS\Lib\ARM 2.包含头文件以及在 工程里 添加 头文件 路径如下 C:\Keil\ARM\CMSIS\Includ ...
- cocos2d-x开发: 一切应该从配置文件读取开始
想要做一款完整的游戏,应该从配置文件读取开始.cocos2d-x本身提供了UserDefault来操作xml格式的配置文件,准确的说配置这模块引擎开发者已经考虑到了.但是xml格式包含大量无关的格式信 ...
- CentOS7安装及相关配置转载
1. 怎样在 CentOS 7.0 上安装和配置 VNC 服务器 https://linux.cn/article-5335-1.html 2. 安装完最小化 RHEL/CentOS 7 后需要做的 ...