UVa 628 - Passwords

来源:互联网 发布:微赞淘宝客浏览器失败 编辑:程序博客网 时间:2024/04/28 19:49

题目:给你一个单词的字典,一个由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;}


0 0
原创粉丝点击