P1037 产生数

题目描述

给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。

规则:

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

规则的右部不能为零。

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

2->5

3->6

上面的整数 234 经过变换后可能产生出的整数为(包括原数):

234 534 264 564 共 4 种不同的产生数

问题:

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

求出:

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

仅要求输出个数。

输入输出格式

输入格式:

键盘输人,格式为:

n k x1 y1 x2 y2 ... ...

xn yn

输出格式:

屏幕输出,格式为:

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

输入输出样例

输入样例#1:

234 2
2 5
3 6
输出样例#1:

4

思路:

  这道题将真有点floyed的意味2333,然后就是坑点辣~

坑点:

  看到数据后懵了一会,为什么我的出负数?!!哦!爆long long辣!所以要用高精来做!

代码:

#include<iostream>

using namespace std;

string n;
int k,can[][];
int ans[]={};///必须将第一个的值赋值为1,不然会爆'0'!!!
int l=,b[]; void work(int x)///高精乘法
{
for(int i=; i<l; i++)
ans[i]*=x;
for(int i=; i<l; i++)
if(ans[i]>=)
{
ans[i+]+=ans[i]/;
ans[i]%=;
}
while(ans[l]>)
{
ans[l+]=ans[l]/;
ans[l]=ans[l]%;
l++;
}
} int main()
{
cin>>n>>k;
int x,y;
while(k--)///k为可变换的数字有多少个
{
cin>>x>>y;
can[x][y]=;///can数组进行标记,即x可以变换为y
}
for(int v=; v<; v++)
for(int j=; j<; j++)
for(int i=; i<; i++)
if(i!=j&&j!=v&&i!=v)///排除x变为x的情况,必须保证让x变为不同的数字
if(can[i][v]==&&can[v][j]==) can[i][j]=;
/*
如果i可以变换成v,并且v还可以变成j的话,那么,i也可以变为j
*/
int len=n.length();
for(int i=; i<len; i++)
{
int n1=n[i]-'',change=;///n1进行转换,将字符串形式的转换为int形式
for(int j=; j<; j++)
if(can[n1][j]==&&n1!=j)///如果当前数字可以进行转换,记录下来,即change++
change++;
b[n1]=change;///记录下来
}
for(int i=; i<len; i++) work(b[n[i]-'']);
for(int i=l-; i>=; i--) cout<<ans[i];
return ;
}

End.

luogu P1037 产生数 x的更多相关文章

  1. 洛谷P1037 产生数 题解 搜索

    题目链接:https://www.luogu.com.cn/problem/P1037 题目描述 给出一个整数 \(n(n<10^{30})\) 和 \(k\) 个变换规则 \((k \le 1 ...

  2. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/article/details/79506484 题目链接: (Lu ...

  3. luogu P5023 填数游戏

    luogu loj 被这道题送退役了 题是挺有趣的,然而可能讨论比较麻烦,肝了2h 又自闭了,鉴于CSP在即,就只能先写个打表题解了 下面令\(n<m\),首先\(n=1\)时答案为\(2^m\ ...

  4. Luogu 1012 - 拼数

    题目链接:https://www.luogu.org/problemnew/show/P1012 题解: 首先,同等长度的数字,用字典序的方法比较大小,和直接比较数字大小是一样的. 其次,对于任意两个 ...

  5. 【洛谷】【计数原理+Floyed】P1037 产生数

    [题目描述:] 给出一个整数 n \((n<10^{30})\) 和 k 个变换规则\((k≤15)\) . 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如: n=234 .有 ...

  6. 【题解】Luogu P4450 双亲数

    原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d) 这就满足莫比乌斯反演 ...

  7. 【题解】Luogu P3217 [HNOI2011]数矩形

    原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...

  8. Luogu P3962 [TJOI2013]数字根 st

    题面 我先对数字根打了个表,然后得到了一个结论:\(a\)的数字根=\((a-1)mod 9+1\) 我在询问大佬后,大佬给出了一个简单的证明: \(\because 10^n\equiv 1(mod ...

  9. 【Luogu】P3311数数(AC自动机上DP)

    题目链接 蒟蒻今天终于学会了AC自动机,感觉很稳 (后一句愚人节快乐) 这题开一个f[i][j][k]表示有没有受到限制,正在枚举第j位,来到了AC自动机的第k个节点 的方案数 随后可以刷表更新 注意 ...

随机推荐

  1. python启动线程查看线程的名称和id;python杀掉进程的方法

    def cpu_app(): print("CPU") #启动一个线程t=threading.Thread(target=cpu_app,args=()) t.daemon = T ...

  2. 【ABAP系列】SAP ABAP MRKO增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP MRKO增强 ...

  3. 【MM系列】 MM60增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列] MM60增强   前言部分 大家可 ...

  4. python中的序列化和反序列化

    ~~~~~~滴滴,,什么是序列呢?可以理解为序列就是字符串.序列化的应用 写文件(数据传输) 网络传输 序列化和反序列化的概念   序列化模块:将原本的字典.列表等内容转换成一个字符串的过程就叫做序列 ...

  5. 【Linux开发】./configure,make,make install的作用

    这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...

  6. powershell下载网站图片

    $picurl = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=10" $data = ...

  7. linux文件属性软硬连接

    硬链接:ln 源文件 目标文件 软链接:ln -s 源文件 目标文件 硬链接总结: 1.具有相同inode节点号的多个文件互为硬链接文件 2.删除硬链接文件或者删除源文件任意之一,文件实体并未被删除. ...

  8. SpringMVC访问映射的jsp文件时,报404错误

    配置文件中需要配置映射自然不必多说 <bean class="org.springframework.web.servlet.view.InternalResourceViewReso ...

  9. 语言I—2019秋作业02

    这个作业属于那个课程 这个作业要求在哪里 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 参考文献 C语言程序设计I https://edu.cnblogs.com/campus/zswx ...

  10. 通过proxychains实现Ubuntu终端代理

    1.在终端内使用代理,需要使用proxychains: sudo apt-get install proxychains 2.编辑 /etc/proxychains.conf sudo gedit / ...