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 怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用

    chmod 755 filename; mv filename /etc/init.d/; chkconfig --add filename #!/bin/bash #chkconfig: 345 8 ...

  2. window.parent与window.openner 之前的总结

    今天总结一下js中几个对象的区别和用法: 1.首先来说说 parent.window与top.window的用法 "window.location.href","loca ...

  3. Longest Common Subsequence & Substring & prefix

    Given two strings, find the longest common subsequence (LCS). Your code should return the length of  ...

  4. iOS7 status bar 样式问题

    在ios7中,有如下status bar 样式 typedef NS_ENUM(NSInteger, UIStatusBarStyle) { UIStatusBarStyleDefault = , / ...

  5. iOS 中通过使用Google API获得Google服务

    最近使用了google drive这个云存储,官方指导网址为 https://developers.google.com/drive/ios/ . 官方库代码网址为 http://code.googl ...

  6. 高效PHP开发注意事项

    2015年2月26日 17:23:26 http://www.open-open.com/lib/view/open1332904714233.html

  7. 101 个 MySQL 的调节和优化的提示(根据实际情况调整,有些已经不适用)

    英文原文:101 Tips to MySQL Tuning and Optimization ( July 12, 2011)翻译:http://www.oschina.net/translate/1 ...

  8. Java中必须了解的常用类

    1.Java的包装类 基本数据类型我们都很熟悉,例如:int.float.double.boolean.char等,基本数据类型不具备对象的特征,不能调用方法,一般能实现的功能比较简单,为了让基本数据 ...

  9. Java for LeetCode 078 Subsets

    Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...

  10. HDU 1003 Max Sum

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...