1009 产生数

2002年NOIP全国联赛普及组

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
 
题目描述 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

数据范围及提示
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全国联赛普及组的更多相关文章

  1. codevs 1009 产生数 2002年NOIP全国联赛普及组 x (内附解析w)

                         题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规 ...

  2. 1008 选数 2002年NOIP全国联赛普及组

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  3. 选数 2002年NOIP全国联赛普及组

    题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  4. Codevs 1010 过河卒 2002年NOIP全国联赛普及组

    1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...

  5. 1010 过河卒 2002年NOIP全国联赛普及组codevs

    1010 过河卒  2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点 ...

  6. 【动态规划】【记忆化搜索】CODEVS 1010 过河卒 2002年NOIP全国联赛普及组

    f(i,j)=f(i-1,j)+f(i,j-1),显然可以暴力递归求解,但是很多重复的状态,所以可以记忆下来. 注意障碍点和边界的特判. #include<cstdio> #include ...

  7. 1043 方格取数 2000年NOIP全国联赛提高组

    1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond         题目描述 Description 设有N* ...

  8. 1099 字串变换 2002年NOIP全国联赛提高组

    1099 字串变换 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 已知有 ...

  9. Codevs 1140 Jam的计数法 2006年NOIP全国联赛普及组

    1140 Jam的计数法 2006年NOIP全国联赛普及组 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Jam是个喜欢标 ...

随机推荐

  1. 通过iframe标签绕过csp

    iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口. 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.loca ...

  2. 2、RabbitMQ-simplest thing(简单队列)

    1.项目准备: 使用maven的依赖 <dependencies> <dependency> <groupId>com.rabbitmq</groupId&g ...

  3. 关于"XML 文档(2, 2)中有错误:不应有 <xml xmlns=''>"错误

    XML文件名 <?xml version="1.0" encoding="utf-8"?> <Config xmlns:xsi="h ...

  4. Dubbo实践(十五)消费者引用服务

    Refer取得invoker的过程 <!-- 指定了哪种的注册中心,是基于zookeeper协议的,指定了注册中心的地址以及端口号 --> <dubbo:registry proto ...

  5. 用画布canvas画安卓logo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. DP学习笔记

    DP学习笔记 可是记下来有什么用呢?我又不会 笨蛋你以后就会了 完全背包问题 先理解初始的DP方程: void solve() { for(int i=0;i<;i++) for(int j=0 ...

  7. #leetcode刷题之路28-实现 strStr() 函数

    实现 strStr() 函数.给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返回 ...

  8. js时间与毫秒互相转换

    1)日期转换为毫秒 如果格式是:yyyy/mm/dd hh:mm:ss可以直接转换.var oldTime = (new Date("2018/07/09 14:13:11")). ...

  9. 你不知道的css之 width “继承”篇。

    众所周知,css的三大特性分别是 继承性,层叠性,和优先级. 那么这里就详细说一下css中width的继承性及其特殊情况. 继承性概念详解:css的继承性指的被包在内部的标签拥有外部标签的样式性,子元 ...

  10. 移动端H5页面解决软件键盘把页面顶起

    在input失去焦点的时候加上强制页面归位 window.scroll(0,0); 上代码 <input data-component="SearchInput" type= ...