给你一串数字(≤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. hibernate save,update,saveorupdate方法有什么区别

    save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用 ...

  2. PPT文档页数显示的增加和更新

    在PPT的右下角增加页数的显示能够帮助演讲者把握进度,所以会经常遇到需要把页数显示在右下角的情况,这次在制作ppt的时候也遇到了.因此在这里总结一下设置方法. 一.在右下角显示当前页数和总页数 1)获 ...

  3. java接口(二)

    1.广义的接口,凡是对外暴露的都可以称作接口. 就像电脑的usb插口. 2.什么时候用接口,什么时候用类? . 3.例子 4.问题:

  4. C# Winform应用程序占用内存较大解决方法整理(转)

    原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂 ...

  5. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...

  6. React Native开发技术周报1

    (一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...

  7. HomeKit 与老旧设备

    苹果推了HomeKit,已经有很多厂商在做,可以达到Siri控制所有设备的功能. 但是Siri也不是万能的,对人类的语义理解也会产生差错,不过我相信未来这个问题会解决掉.     如果家里有老旧的电视 ...

  8. Struts2 动态结果和带参数的跳转

    完整代码:Struts16ActionResultsDemo.rar 1.动态结果. 有时我们需要在Action里取得我个要转跳的页面 看一下我们的struts.xml <?xml versio ...

  9. 【讲义提纲】以一个实战新闻cms增删改查demo为例,给学院国创队伍培训php

    PHP实战基础——以一个新闻cms的增删改查为例 一.        环境配置 二.        数据库创建 三.        增删改查demo 连接数据库 <?php $link=mysq ...

  10. 如何在 apache 中设置缓存有效时间

    今天学习了下如何在 apache 中设置缓存时间,记之以备忘. 在 http 报文头中,与缓存时间有关的两个字段是 Expires 以及 Cache-Control 中的 max-age,Expire ...