标签: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