【USACO 1.2】Name That Number
给你一串数字(≤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的更多相关文章
- 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T4 过路费
[Usaco 2009 Gold]JZOJ2020年9月19日提高B组T4 过路费 题目 Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之 ...
- 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛
[Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...
- 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题
[Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...
- 【Usaco 2009 Silver】JZOJ2020年9月19日提高B组T1 音乐节拍
[Usaco 2009 Silver]JZOJ2020年9月19日提高B组T1 音乐节拍 题目 Description FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000) ...
- 【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number
数位DP 同上一题Windy数 预处理求个组合数 然后同样的方法,这次是记录一下0和1的个数然后搞搞 Orz cxlove /************************************* ...
- 【USACO 2012 Open】Running Laps(树状数组)
53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...
- 【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$都是偶数啦~ ...
- 【USACO 3.1】Stamps (完全背包)
题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...
- 【USACO 3.1】Contact(01子串按出现次数排序)
题意:给你一个01字符串,将长度为a到b之间(包含a.b)的子串按照出现次数排序.注意输入输出格式 题解:01子串对应一个二进制,为了区别11和011这样的不同子串,我们把长度也记录下来,官方题解是在 ...
随机推荐
- 当一名黑客获得一份WebShell后,会做什么
当你获得一份webshell后,你会干嘛? 我曾获得N多webshell.什么discuz.dedecms.phpwind.phpweb.aspcms等等,甚至还包括N多自己研发的线上平台. 可是,问 ...
- 排序及重复元素去重的说明,TreeSet,HashSet
先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String n ...
- gitlab配置邮件通知功能操作记录
之前已经介绍了gitlab的部署http://www.cnblogs.com/kevingrace/p/5651402.html但是没有配置邮箱通知功能,今天这里介绍下gitlab安装后的邮箱配置操作 ...
- 使用bootstrap-table简化CRUD
1. 引入bootstrap-table资源包, 页首引用css, 页脚引用js 2. table 参数说明 data-toggle="table" data-toolbar=&q ...
- AngularJS中的身份验证
欢迎大家指导与讨论 : ) 一. 身份验证的意义 首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源.基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一 ...
- 谈谈patch strategy
所谓的patch strategy,就是软件发布后出现bug时打补丁的方式 - 主要是关于源代码branch如何组织的方式 针对项目的开发阶段.开发状态.维护方式不同,可以有不同的patching s ...
- 翻译qmake文档(四) Building Common Project Types
翻译qmake文档 目录 本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型 本章描述 ...
- HTTPS科普扫盲帖
为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...
- .net破解一(反编译,反混淆-剥壳)
大家好,前段时间做数据分析,需要解析对方数据,而数据文件是对方公司内部的生成方式,完全不知道它是怎么生成的. 不过还好能拿到客户端(正好是C#开发)所以第一件事就是用Reflector编译,但是没有想 ...
- 用程序集编写clr表值函数:把正则表达式引入数据库中
正则表达式非常好,但在数据库中就是没有,但可以通过程序集方式扩展 先编写一个dll,标量函数很好写,表值函数麻烦一点 下面是C#代码 using System; using System.Data; ...