给你一串数字(≤12个),每个数字可以对应3个字母,求生成的所有字符串里,在字典内的有哪些。

我做的时候想的是字典树(Trie 树),模拟数串生成的所有字符串,然后在字典树里查找一下。

/*
TASK:namenum
LANG:C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define ll long long
#define MAX 26
#define N 5001
#define M 15 using namespace std;
int top,trie[N*M][MAX+];
int search(char s[]){
int i,rt;
for(rt=,i=;rt=trie[rt][s[i]-'A'];)
if(!s[++i])return trie[rt][MAX];
return ;
}
void insert(char s[]){
int rt=;
for(int i=;s[i];i++){
int &nxt=trie[rt][s[i]-'A'];
if(==nxt) nxt=++top;
rt=nxt;
}
trie[rt][MAX]=;
} int cnt;
//虽然只有3个字母,但是后面有\0,故要开到4。
char ma[][]={"","","ABC","DEF","GHI","JKL","MNO","PRS","TUV","WXY"};
char s[M],name[M];
int dfs(int d){
if(!s[d]){
if(search(name)){
cout<<name<<endl;
return ;
}
return ;
}
int ok=;
for(int i=;i<;i++){
name[d]=ma[s[d]-''][i];
if(dfs(d+))ok=;
}
return ok;
}
int main() {
//freopen("namenum.in","r",stdin);
//freopen("namenum.out","w",stdout);
ifstream in("dict.txt");
while(in>>s)insert(s);
cin>>s;
if(!dfs())cout<<"NONE"<<endl;
return ;
}

官方题解里说可以二分,还可以把字典全部转为数字,总共就5000个,这就是逆向思维。

/*
TASK:namenum
LANG:C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define ll long long
#define MAX 26
#define N 5001
#define M 15 using namespace std; char dic[N][M];
int ma[MAX]={,,,,,,,,,,,,,,,,,,,,,,,,};
ll num[N],tot,t;
int main() {
freopen("namenum.in","r",stdin);
freopen("namenum.out","w",stdout);
ifstream in("dict.txt");
while(in>>dic[tot]){
ll &ans=num[tot];
for(int i=;dic[tot][i];i++)
ans=ans*+ma[dic[tot][i]-'A'];
tot++;
}
cin>>t;
int ok=;
for(int i=;i<tot;i++)
if(num[i]==t){ok=;cout<<dic[i]<<endl;}
if(!ok)cout<<"NONE"<<endl;
return ;
}

  

  

【USACO 1.2】Name That Number的更多相关文章

  1. 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T4 过路费

    [Usaco 2009 Gold]JZOJ2020年9月19日提高B组T4 过路费 题目 Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之 ...

  2. 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛

    [Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...

  3. 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题

    [Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...

  4. 【Usaco 2009 Silver】JZOJ2020年9月19日提高B组T1 音乐节拍

    [Usaco 2009 Silver]JZOJ2020年9月19日提高B组T1 音乐节拍 题目 Description FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000) ...

  5. 【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number

    数位DP 同上一题Windy数 预处理求个组合数 然后同样的方法,这次是记录一下0和1的个数然后搞搞 Orz cxlove /************************************* ...

  6. 【USACO 2012 Open】Running Laps(树状数组)

    53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...

  7. 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉

    DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $  当然这里的$i$和$k$都是偶数啦~ ...

  8. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  9. 【USACO 3.1】Contact(01子串按出现次数排序)

    题意:给你一个01字符串,将长度为a到b之间(包含a.b)的子串按照出现次数排序.注意输入输出格式 题解:01子串对应一个二进制,为了区别11和011这样的不同子串,我们把长度也记录下来,官方题解是在 ...

随机推荐

  1. Js倒计时程序

    Js倒计时程序 点击下载

  2. eclipse服务器add and remove 工程时出现there are no resources that can be added or removed from the server

    网上的解决方法: 解决方法: 第1步.新建一个“Dynamic Web Project” 第2步.把新建项目里面的.project文件和.settings文件夹复制到导入的那个项目里面. 可是我发现: ...

  3. dubbo2.5.3 与spring 3.1.x 冲突

    在集成了dubbo2.5.3 的项目中初始化出现 MalformedParameterizedTypeException 检查发现这是因为dubbo2.5.3依赖的springframeworks是2 ...

  4. react native中的欢迎页(解决首加载白屏)

    参照网页: http://blog.csdn.net/fengyuzhengfan/article/details/52712829 首先是在原生中写一些方法,然后通过react native中js去 ...

  5. Map集合 总结

    (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ...

  6. express:webpack dev-server中如何将对后端的http请求转到https的后端服务器中?

    在上一篇文章(Webpack系列:在Webpack+Vue开发中如何调用tomcat的后端服务器的接口?)我们介绍了如何将对于webpack-dev-server的数据请求转发到后端服务器上,这在大部 ...

  7. 实验一 Java开发环境的熟悉

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...

  8. ThreadLocal原理及其实际应用

    前言 java猿在面试中,经常会被问到1个问题: java实现同步有哪几种方式? 大家一般都会回答使用synchronized, 那么还有其他方式吗? 答案是肯定的, 另外一种方式也就是本文要说的Th ...

  9. jsonp的优缺点

    转载:http://www.w3cfuns.com/notes/18271/df9ecd8f0ca5e523ae75745a3996c47c.html JSONP的优缺点        1.优点    ...

  10. C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)

    1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加: 2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .Ke ...