标签:blog io ar os sp for 2014 log bs
题目:给你一个单词的字典,一个由0与#组成的字符串,0代表数字0-9,#代表字典中的单词;
输出所有的0#串的表示方式,统一句子中的#代表一个单词。
分析:搜索。打表计算出所有的数字的排列情况,然后枚举输出即可。
说明:P(10,7)当成P(7,7)数字开小了,RE了好几次。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; char words[111][300],rule[300]; int buf[605000][11],save[11],number; void dfs(int d, int n) { if (d == n) { for (int i = 0 ; i < n ; ++ i) buf[number][i] = save[i]; number ++; return; } for (int i = 0 ; i < 10 ; ++ i) { save[d] = i; dfs(d+1, n); save[d] = i; } } int main() { int n,m; while (~scanf("%d",&n)) { for (int i = 0 ; i < n ; ++ i) scanf("%s",words[i]); scanf("%d",&m); printf("--\n"); for (int i = 0 ; i < m ; ++ i) { scanf("%s",rule); int count = 0; for (int j = 0 ; rule[j] ; ++ j) count += (rule[j]=='0'); number = 0; dfs(0, count); for (int j = 0 ; j < n ; ++ j) for (int p = 0 ; p < number ; ++ p) { for (int deep = 0,k = 0 ; rule[k] ; ++ k) { if (rule[k] == '#') printf("%s",words[j]); if (rule[k] == '0') printf("%d",buf[p][deep ++]); } printf("\n"); } } } return 0; }
标签:blog io ar os sp for 2014 log bs
原文地址:http://blog.csdn.net/mobius_strip/article/details/41479471