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

思路:

  符合变换规则的数可以在变换一次后的新数仍然符合变换规则

  所以我们考虑将之转化为一个图论问题

  就是考虑从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; unsigned long long int ans=,num[]; int n,map[][]; char cur[]; int main()
{
memset(map,/,sizeof(map));
int from,to;
scanf("%s",cur);
scanf("%d",&n);
//for(int i=0;i<=9;i++) num[i]=1;
for(int i=;i<=n;i++)
{
scanf("%d%d",&from,&to);
map[from][to]=;
}
for(int k=;k<=;k++)
{
for(int j=;j<=;j++)
{
for(int i=;i<=;i++)
{
if(i!=j&&j!=k&&k!=i)
if(map[j][k]+map[k][i]<map[j][i])
{
map[j][i]=map[j][k]+map[k][i];
}
}
}
}
//for(int i=0;i<=9;i++) cout<<num[i]<<" ";
//cout<<endl;
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 ;
}

AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)的更多相关文章

  1. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  2. AC日记——约瑟夫问题 codevs 1282

    1282 约瑟夫问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 有编号从1到N的N个小 ...

  3. AC日记——砍树 codevs 1388

    1388 砍树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 伐木工人米尔科需要砍倒M米长的木 ...

  4. AC日记——元素查找 codevs 1230

    1230 元素查找  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给出n个正整数,然后有 ...

  5. AC日记——石子归并 codevs 1048

    1048 石子归并  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 有n堆石子排成一列,每堆石子 ...

  6. AC日记——搞笑世界杯 codevs 1060(dp)

    题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有 人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋 ...

  7. AC日记——平衡树练习 codevs 4244

    4244 平衡树练习 思路: 有节操的人不用set也不用map: 代码: #include <cstdio> #include <cstring> #include <i ...

  8. AC日记——营业额统计 codevs 1296 (splay版)

    营业额统计 思路: 每次,插入一个点: 然后找前驱后继: 来,上代码: #include <cmath> #include <cstdio> #include <iost ...

  9. AC日记——银河英雄传说 codevs 1540

    1540 银河英雄传说 2002年NOI全国竞赛  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解       题目描述 Description 公元五 ...

随机推荐

  1. SQL数据库基础(四)

    聚合函数:sum,avg,max,min,count 使用方法示例: group by  分组的使用方法 分组的练习: 数学函数:ABS.ceiling.floor.power.round.sqrt. ...

  2. Thread.CurrentPrincipal & HttpContext.Current.User

    据说要这样写才稳妥 // This principal will flow throughout the request.VoyagerPrincipal principal = new Voyage ...

  3. R语言学习笔记:小试R环境

    买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

  4. 【转】handler.removeCallbacks失效问题

    package com.example.demoactivity; import android.app.Activity; import android.os.Bundle; import andr ...

  5. EdgesForExtendedLayout

    在IOS7 之后viewController有一个新的属性叫做edgesForExtendedLayout,这个属性指定viewController的view边缘延伸的方向,默认情况下是UIRectE ...

  6. 【转】IOS开发资源汇总

    转自:http://blog.csdn.net/favormm/article/details/6664970 如何用Facebook graphic api上传视频: http://develope ...

  7. linux+jre+apache+mysql+tomcat调优

    一.不再为Apache进程淤积.耗尽内存而困扰 0. /etc/my.cnf,在mysqld那一段加上如下一行: log-slow-queries=queries-slow.log 重启MySQL 酌 ...

  8. Mac terminal从bash切换到zsh

    0.预备知识 echo $SHELL命令可以查看当前正在使用什么shell 默认情况下(mbp 10.10.5)使用bash作为默认shell,然而也自带zsh,which zsh命令可以查看zsh的 ...

  9. 附带详细注释的log4net的app.config文件配置例子

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...

  10. Effective Java 07 Avoid finallizers

    NOTE Never do anything time-critical in a finalizer. Never depend on a finalizer to update critical ...