一本通 第三部分 数据结构 第二章 队列 1361:产生数(Produce)
2018-12-18 17:03
1556 查看
1361:产生数(Produce)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 1072 通过数: 470
【题目描述】
给出一个整数n(n≤2000)和k个变换规则(k≤15)。规则:
① 1个数字可以变换成另1个数字;
② 规则中,右边的数字不能为零。
例如:n=234,k=2规则为
2 → 5
3 → 6
上面的整数234经过变换后可能产生出的整数为(包括原数)234,534,264,564共4种不同的产生数。
求经过任意次的变换(0次或多次),能产生出多少个不同的整数。仅要求输出不同整数个数。
【输入】
nkx1x2…xny1y2…ynnkx1y1x2y2……xnyn
【输出】
格式为一个整数(满足条件的整数个数)。
【输入样例】
234
2
2 5
3 6
【输出样例】
4
#include<iostream> #include<queue> #include<vector> using namespace std; bool v[10001]; int from[16],to[16]; vector<int>a; queue<int>q; void num(int n) { a.clear(); int k=0; while(n) { a.push_back(n%10); n/=10; } } int backnum(int array,int newnum) { int t=1,num=0; for(int i=0;i<a.size();i++) { if(i==array) num+=t*newnum; else num+=t*a[i]; t*=10; } return num; } int main() { int n,k,ans=1; cin>>n>>k; for(int i=1;i<=k;i++) cin>>from[i]>>to[i]; q.push(n); v[n]=true; while(!q.empty()) { int u=q.front(); q.pop(); num(u); for(int i=0;i<a.size();i++) { for(int j=1;j<=k;j++) { int m=backnum(i,to[j]); if(a[i]==from[j]&&!v[m]) { q.push(m); v[m]=true; ans++; } } } } cout<<ans; }
相关文章推荐
- [置顶] 信息学奥赛一本通(C++版) 第三部分 数据结构 第二章 队列
- [置顶] 信息学奥赛一本通(C++版) 第三部分 数据结构 第四章 图论算法
- 一本通 第三部分 数据结构 第四章 图论算法 第二节 最短路径算法 1345:【例4-6】香甜的黄油
- 一本通 第三部分 数据结构 第四章 图论算法 第二节 最短路径算法 1376:信使(msner)
- [置顶] 信息学奥赛一本通(C++版) 第三部分 数据结构 第一章 栈
- 一本通 第三部分 数据结构 第四章 图论算法 第二节 最短路径算法 1377:最优乘车(travel)
- 一本通 第三部分 数据结构 第四章 图论算法 第二节 最短路径算法 1379:热浪(heatwv)
- 一本通 第三部分 数据结构 第四章 图论算法 第二节 最短路径算法 1382:最短路(Spfa)
- [置顶] 信息学奥赛一本通(C++版) 第三部分 数据结构 第三章 树
- 第三部分 数据结构 第 10 章 基本数据结构
- 第三部分 数据结构(一)
- 笨办法学 Python · 续 第三部分:数据结构
- Mini-Notes: 数据结构与算法-[第三部分]排序
- 第三部分 数据结构(二)
- 数据结构(严蔚敏)第二章部分算法设计题的实现
- 数据文件结构分析——第三部分
- 第六章:数据结构基础。第三部分
- 一本通 第二部分 基础算法 第二章 数据排序 1311:【例2.5】求逆序对
- 第六章:数据结构基础。第三部分
- 数据结构之队列(炫技篇)