题意:给你一些固定的字符串,在给出数字,根据键盘的对应关系,输出所有的满足条件的字符串,输出顺序无所谓。

  思路:因为题目说了,输出比较小,说明测试数据并不强,所以可以暴力回溯求出答案,将所有的给出的字符串压缩为数字,再将对应相同数字的字符串存储起来(当时忘了这里,WA了几次),然后深搜即可。

  注意:多个字符串有可能对应相同的数字,需要另外存储,在深搜的时候,枚举这个符合条件的字符串。

代码如下:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<map>
#include<cmath>
using namespace std;
map<string,int>ma;
vector<int> ve[];
char get_num(char ch){
if(ch>='a'&&ch<='c') return '';
if(ch>='d'&&ch<='f') return '';
if(ch>='g'&&ch<='i') return '';
if(ch>='j'&&ch<='l') return '';
if(ch>='m'&&ch<='o') return '';
if(ch>='p'&&ch<='s') return '';
if(ch>='t'&&ch<='v') return '';
if(ch>='w'&&ch<='z') return '';
}
string change(string a){
int len = a.length();
string tmp = "";
for(int i = ;i < len;i++){
tmp += get_num(a[i]);
}
return tmp;
}
string word[];
char aim[];
int len;
string ans[];
void dfs(int id,int num){
if(id == len){
for(int i = ;i < num;i++){
if(i==) cout<<ans[i];
else cout<<" "<<ans[i];
}
cout<<"."<<endl;
return ;
}
string tmp = "";
int lenv,mtmp,vnum;
for(int i = id;i < len;i++){
tmp += aim[i];
mtmp = ma[tmp];
if(mtmp){
lenv = ve[mtmp].size();
for(int j = ;j < lenv;j++){
vnum = ve[mtmp][j];
ans[num] = word[vnum];
dfs(i+,num+);
ans[num] = "";
}
}
}
return ;
}
int main()
{
int n,tmp,vis[];
string changed[];
//freopen("D.in.cpp","r",stdin);
while(~scanf("%d",&n)){
if(!n) break;
ma.clear();
for(int i = ;i <= n;i++){
cin>>word[i];
changed[i] = change(word[i]);
ma[changed[i]] = i;
ve[i].clear();
}
memset(vis,,sizeof(vis));
for(int i = ;i <= n;i++){
if(vis[i]) continue;
tmp = ma[changed[i]];
for(int j = i;j <= n;j++){
if(changed[i] == changed[j]){
vis[j] = ;
ve[tmp].push_back(j);
}
}
}
scanf("%s",aim);
len = strlen(aim);
dfs(,);
printf("--\n");
}
return ;
}

UVALive 2403 77377解题报告(深搜)的更多相关文章

  1. UVALive 2053 Puzzlestan(深搜+技巧)

    这个题目的深搜形式,我也找出来了,dfs(i,j)表示第i个人选到了第j个物品,但是我却无限RE了,原因是我的viod型深搜太过暴力,我当时定义了一个计数器,来记录并限制递归的层数,发现它已经递归到了 ...

  2. UVALive 7299 Boggle(深搜的姿势)

    一开始确实是我的锅,我把题意理解错了,以为是一个q周围没有q的时候才可以当时qu,其实是只要碰到q,他就是qu,所以我们也可以通过预处理的方式,把字典中的不满足qu连在一起的直接去掉. 后来的各种TI ...

  3. LeetCode - Course Schedule 解题报告

    以前从来没有写过解题报告,只是看到大肥羊河delta写过不少.最近想把写博客的节奏给带起来,所以就挑一个比较容易的题目练练手. 原题链接 https://leetcode.com/problems/c ...

  4. 深搜(DFS),Image Perimeters

    题目链接:http://poj.org/problem?id=1111 解题报告: 1.这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长. #include ...

  5. 深搜(DFS),回溯,Fire Net

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每 ...

  6. 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...

  7. 北大ACM试题分类+部分解题报告链接

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  8. poj1190 生日蛋糕(深搜+剪枝)

    题目链接:poj1190 生日蛋糕 解题思路: 深搜,枚举:每一层可能的高度和半径 确定搜索范围:底层蛋糕的最大可能半径和最大可能高度 搜索顺序:从底层往上搭蛋糕,在同一层尝试时,半径和高度都是从大到 ...

  9. NOIP 2000解题报告

    题目简单,思路很快就有,关键是代码实现能力,大概3个多小时完成.第一题:题目大意:将一个10进制数N转换成-B进制数 (负进制转换):B<=20, N(-32768<=N<=3276 ...

随机推荐

  1. OC之KVC,KVO

    KVO简介 在 Cocoa 的模型-视图-控制器 (Model-view-controller)架构里,控制器负责让视图和模型同步.这一共有两步:当 model 对象改变的时候,视图应该随之改变以反映 ...

  2. Openjudge-计算概论(A)-计算书费

    描述: 下面是一个图书的单价表:计算概论 28.9 元/本数据结构与算法 32.7 元/本数字逻辑 45.6元/本C++程序设计教程 78 元/本人工智能 35 元/本计算机体系结构 86.2 元/本 ...

  3. ubuntu下安装UltraEdit

    在windows下常年使用UltraEdit来查看log,现在突然切换到ubuntu下,系统自带的Text Editor相当不适应:只有自己安装了. 首先,需要下载安装包,可以去:http://www ...

  4. C#代码实现把网页文件保存为mht文件

    MHT叫“web单一文件”.顾名思义,就是把网页中包含得图片,CSS文件以及HTML文件全部放到一个MHT文件里面.而且浏览器可以直接读取得. 由于项目需要,需实现把指定的网页文件保存为mht文件.于 ...

  5. Spring Timer实现

    定时器:继承java.util.TimerTask类实现run方法 package com.zbb.framework.util.timer; import java.util.TimerTask; ...

  6. asp.net URL DES加密 什在URL中的使用

    DES 加密 有时会有 + = 这些特殊字符串 Server.UrlDecode(Request["UserName"]) //能解决  = 号,但是 +号会变成空格 HttpUt ...

  7. Linux内核协议栈 NAT性能优化之FAST NAT

    各位看官非常对不起,本文是用因为写的,如果多有不便敬请见谅 代码是在商业公司编写的,在商业产品中也不能开源,再次抱歉   This presentation will highlight our ef ...

  8. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  9. ios 基础数据类型

    1:NSString http://blog.csdn.net/likendsl/article/details/7417878 http://xys289187120.blog.51cto.com/ ...

  10. Eclipse的WorkingSet使用(转载)

    Eclipse作为一款流行的JavaIDE开发工具,其有很多好用的功能为我们的开发提供帮助.但我们的工作空间中有很多项目时,管理起来就很头疼了. 但是我们又不想更换工作区间,所以我们需要一个更加有效的 ...