• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Sherlockyk
博客园    首页    新随笔    联系   管理    订阅  订阅

产生数

产生数

Time Limit:1000MS  Memory Limit:65536K

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

   n k
  x1 y1
  x2 y2
  ... ...
  xn yn

Output

一个整数(满足条件的个数)

Sample Input

234 2
2 5
3 6

Sample Output

4

Source

NOIP2002年第八届普及组试题3 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int c[1001][1001];
 5 long long int t=1;
 6 int main(){
 7     string n;
 8     int m,i,j,k;
 9     cin>>n;
10     scanf("%d",&m);
11     for(i=1;i<=m;i++){
12         int x,y;
13         scanf("%d%d",&x,&y);
14         c[x][y]=1;
15         c[y][x]=1;
16     }
17     for(i=0;i<10;i++){
18         for(j=0;j<10;j++){
19             for(k=0;k<10;k++){
20                 if(j!=i && i!=k && j!=k){
21                     if(c[i][j]==1 && c[i][k]==1){
22                         c[k][j]=1;
23                     }
24                 }
25             }
26         }
27     }
28     for(i=0;i<n.length();i++){
29         int d=n[i]-48;
30         int nn=1;
31         for(j=0;j<10;j++){
32             if(c[d][j]==1 && d!=j){
33                 nn++;
34             }
35         }
36         t*=nn;
37     }printf("%d",t);
38 return 0;}

 

posted @ 2018-03-17 11:35  Sherlockyk  阅读(180)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3