vijos P1129 产生数
来源:互联网 发布:韩国女团身材管理知乎 编辑:程序博客网 时间:2024/05/21 12:45
题意:输入n组数a->b,再输入一串数字,其中数字可由a变换为b,求存在多少种情况。
链接:https://vijos.org/p/1129
思路:可转化为一个最短路径问题。将10个数字的变换情况分别看作一个节点,利用floyd求出所有通路,统计每种数的变换可能,再转化为组合问题。
注意点:求组合时要考虑溢出的可能。用大数乘法。
以下为AC代码:
评测状态Accepted题目P1129 产生数递交时间2014-11-06 17:14:05代码语言C++评测机VijosEx消耗时间15 ms消耗内存280 KiB评测时间2014-11-06 17:14:07#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <vector>#include <deque>#include <list>#include <cctype>#include <algorithm>#include <climits>#include <queue>#include <stack>#include <cmath>#include <set>#include <iomanip>#include <cstdlib>#include <ctime>using namespace std;struct node{ char a; char b; friend bool operator < ( const node &a, const node &b ) { return a.b < b.b; }} p[20];bool adj[10][10];int ans[50];void muti ( int m ){ int tmp = 0; for ( int i = 0; i < 50; i ++ ) { tmp = ans[i] * m + tmp; ans[i] = tmp % 10000; tmp = tmp / 10000; }}void floyd ( int n ){ for ( int i = 0; i < n; i ++ ) { adj[i][i] = true; for ( int j = 0; j < n; j ++ ) { for ( int k = 0; k < n; k ++ ) { if ( adj[j][i] && adj[i][k] ) { adj[j][k] = true; } } } }}int main(){ int num[15] = { 0 }; string str; while ( cin >> str ) { int n; cin >> n; memset ( adj, 0, sizeof ( adj ) ); memset ( ans, 0, sizeof ( ans ) ); for ( int i = 0; i < n; i ++ ) { cin.clear(); cin >> p[i].a; cin.clear(); cin >> p[i].b; adj[p[i].a-'0'][p[i].b-'0'] = true; } floyd( 10 ); for ( int i = 0; i < 10; i ++ ) { num[i] = 0; for ( int j = 0; j < 10; j ++ ) { if ( adj[i][j] ) { num[i] ++; } } } ans[0] = 1; for ( int i = 0; i < (int)str.size(); i ++ ) { muti ( num[str[i] - '0'] ); } int k; for ( k = 49; k >= 0 && ans[k] == 0; k -- ); printf ( "%d", ans[k] ); k --; for ( ; k >= 0; k -- ) { printf ( "%04d", ans[k] ); } cout << endl; } return 0;}
0 0
- vijos P1129 产生数
- P1129 产生数
- vijos p1128 (选数)
- 【vijos】P1304 回文数
- Vijos P1304回文数
- Vijos P1034 回文数
- Vijos 回文数
- Vijos 巧妙填数
- Vijos 数独验证
- Vijos 波浪数
- vijos连续数之和
- 巧妙填数-vijos
- 产生数
- 产生数
- 产生数
- 产生数
- 产生数
- 产生数
- 在TQ2440实验板上进行linux+qtopia++ov9650+opencv的图像处理系统
- 同步任务处理:异步线程中实时更新视图的处理(笔记)
- 报nosuchMethodError错误的总结
- centos7 安装iptables ,关闭防火墙,打开指定的端口号
- 在qt上OpenCV处理OV9650采集的图像
- vijos P1129 产生数
- Android Studio和gradle 开发入门
- Windows下安装MySQL解压版
- GBK编码和UTF-8编码的区别
- 每个人都有进步的方法,每个人都要审读自己
- R语言常用函数参考
- Android2个Activity之间传递对象
- 用FusionChart开发javaWEB报表
- 容斥原理