http://cojs.tk/cogs/problem/problem.php?pid=710

近日开始刷水。。。

此题我为了练一下hash。。。但是hash跑得比暴力还慢。。

不言而喻。。。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
#define setio(x) freopen(""#x".in", "r", stdin); freopen(""#x".out", "w", stdout)
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } using namespace std; struct Hash {
char s[30];
Hash() { s[0]=' '; }
}vis[100008]; char s[30], t[30];
int len, flag; inline const void sethash(char *str) {
int l=strlen(str), ret=0, k=1;
rep(i, l) ret=k*(str[i]-'A')%100007, k=(k*27)%100007;
while(vis[ret].s[0]!=' ') { ++ret; if(ret==100007) ret=0; }
strcpy(vis[ret].s, str);
}
inline const bool check(char *str) {
int l=strlen(str), ret=0, k=1;
rep(i, l) ret=k*(str[i]-'A')%100007, k=(k*27)%100007;
while(vis[ret].s[0]!=' ') {
if(!strcmp(vis[ret].s, str)) return 1;
++ret; if(ret==100007) ret=0;
}
return 0;
}
const int mp[10][3]={
{ 0, 0, 0}, { 0, 0, 0}, {'A', 'B', 'C'}, {'D', 'E', 'F'},
{'G', 'H', 'I'},{'J', 'K', 'L'}, {'M', 'N', 'O'},
{'P', 'R', 'S'},{'T', 'U', 'V'}, {'W', 'X', 'Y'}
};
void dfs(const int &x) {
if(x==len) { if(check(t)) { printf("%s\n", t); flag=1; } return; }
int num=s[x]-'0';
rep(i, 3) {
t[x]=(char)mp[num][i];
dfs(x+1);
}
}
int main() {
char str[30];
setio(namenum);
rep(i, 4617) {
scanf("%s", str);
sethash(str);
}
scanf("%s", s);
len=strlen(s);
dfs(0);
if(!flag) puts("NONE");
return 0;
}

命名那个数字

译 by timgreen

在威斯康辛州牛大农场经营者之中,都习惯于请会计部门用连续数字给母牛打上烙印。
但是,母牛用手机时并没感到这个系统的便利,它们更喜欢用它们喜欢的名字来呼叫它们的同伴,而不是用像这个的语句"C'mon, #4734, get along."。
请写一个程序来帮助可怜的牧牛工将一只母牛的烙印编号翻译成一个可能的名字。
因为母牛们现在都有手机了,使用那标准的按键的排布来把收到从数目翻译到文字,除了"Q" 和 "Z"(没出现过)

2: A,B,C     5: J,K,L 8: T,U,V
3: D,E,F     6: M,N,O 9: W,X,Y
4: G,H,I     7: P,R,S

可接受的名字都被放在测试数据的前若干行,它包含一连串的少于 5,000个可接受的牛名字。 (所有的名字都是大写的)
收到母牛的编号返回那些能从编号翻译出来并且在字典中的名字。
举例来说,编号 4734 能产生的下列各项名字:
GPDG GPDH GPDI GPEG GPEH GPEI GPFG GPFH GPFI GRDG GRDH GRDI
GREG GREH GREI GRFG GRFH GRFI GSDG GSDH GSDI GSEG GSEH GSEI
GSFG GSFH GSFI HPDG HPDH HPDI HPEG HPEH HPEI HPFG HPFH HPFI
HRDG HRDH HRDI HREG HREH HREI HRFG HRFH HRFI HSDG HSDH HSDI
HSEG HSEH HSEI HSFG HSFH HSFI IPDG IPDH IPDI IPEG IPEH IPEI
IPFG IPFH IPFI IRDG IRDH IRDI IREG IREH IREI IRFG IRFH IRFI
ISDG ISDH ISDI ISEG ISEH ISEI ISFG ISFH ISFI

碰巧,81个中只有一个"GREG"是有效的(在字典中)。

Challenge One
写一个程序来对给出的编号打印出所有的有效名字,如果没有则输出"NONE'' 。
编号可能有12位数字。
PROGRAM NAME: namenum

INPUT FORMAT
4618行,前4617行为可接受的名字(即字典),最后单独的一行包含一个编号(长度可能从1到12)。

SAMPLE INPUT (file namenum.in)

/*前若干行的字典省略了*/

4734

OUTPUT FORMAT
以字典顺序输出一个有效名字的不负列表,一行一个名字。

SAMPLE OUTPUT (file namenum.out)
GREG

【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)的更多相关文章

  1. 杭电oj1860:统计字符(字符串hash / 水题)

    统计字符 题目链接 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  2. Luogu USACO Training 刷水记录

    开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...

  3. USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers

    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...

  4. USACO Training Section 1.1 Your Ride Is Here

    题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...

  5. 【MFC】ID命名和数字约定

    ID命名和数字约定 MFC ID 命名和数字约定需要满足以下要求: 提供对 Visual C++ 资源编辑器支持的 MFC 库和 MFC 应用程序中使用的一致的 ID 命名标准. 这样就可以轻松地对程 ...

  6. 关于USACO Training

    做了这么久的题目,突然发现最经典的 USACO Training 还没有做过?加速水一遍吧!我会把题解放在上面的.

  7. USACO Training Section 1.1 题解(共4题)

    第一题 题目传送门:你的飞碟在这儿 分析 水题一道,输入两个字符串,将它们转换为数字并同时相乘,然后判断一下它们是不是对于47同余就可以了. 代码 #include<bits/stdc++.h& ...

  8. MFC:ID命名和数字约定

    今天早上双击一个刚刚编译完成的应用程序,界面刚刚显示,又自动触发了一个菜单事件,打开了一个网页.真的很意外.关闭窗口,再次双击,又自动打开了一个网页,再关闭,再双击,又不自动打开网页了.这是什么情况? ...

  9. Name That Number 命名那个数字

    1.2.3 Name That Number 命名那个数字 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 183  Solved: 33[Submit][ ...

随机推荐

  1. Linux rpm安装问题解决

    1.安装时提示:warning: *.rpm: Header V3 RSA/SHA256 Signature, keykey ID c105b9de: NOKEY 解决的方法就是在rpm 语句后面加上 ...

  2. 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树

    冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...

  3. JDK1.7 HashMap 源码分析

    概述 HashMap是Java里基本的存储Key.Value的一个数据类型,了解它的内部实现,可以帮我们编写出更高效的Java代码. 本文主要分析JDK1.7中HashMap实现,JDK1.8中的Ha ...

  4. 【读书笔记】读《JavaScript模式》 - JavaScript函数常用模式

    API模式:回调模式.配置对象.返回函数: 初始化模式:即时函数.即时对象初始化.初始化分支: 性能模式:备忘模式.自定义模式 //*********************** API模式 **** ...

  5. POSIX线程--同时执行

    //#define _REENTRANT//#define _POSIX_C_SOURCE#include <iostream>#include <string>#includ ...

  6. C# WebProxy POST 或者 GET

    代理服务器无账号和密码的代理服务器: //创建请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //实例化一个We ...

  7. jQuery Mobile 基础(第四章)

    1.主题 jQuery Mobile 提供了5种不同的主题样式, 从 "a" 到 "e" - 每一种主题的按钮,工具条,内容块等等颜色都不一致,每个主题的视觉效 ...

  8. Java Hour 14 多线程基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. 多线程 这个是基 ...

  9. wp8 安装.Net3.5

    Microsoft .NET Framework 3.5 Service Pack 1 http://www.microsoft.com/zh-cn/download/details.aspx?id= ...

  10. STL 常见操作

    stl的操作不是很熟练, 记录一下 1.vector: 排序: sort(vc.begin(),vc.end()); 去重: sort(vc.begin(),vc.end()); num.erase( ...