USACO Section1.2 Name That Number 解题报告
namenum解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
你有一个手机,键盘如下所示:
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
你还有一本字典,就是本目录下的"dict.txt"。里面有许多英文字符串,一行一个,是按照字典序排好的。
现在给你一个输入,是数字字符串。请你从字典中找到所有能与之匹配的英文字符串,一行一个,按照字典序输出,一个没有输出"NONE"。
所谓匹配是指:按照手机键盘,你可以将两个串对应起来,并且长度相同。
【数据范围】
数字串长度可能是1~12
英文串不到5000个
【输入样例】
4734
【输出样例】
GREG
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
没有难度。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
1.字典本身是按照字典序排好的,注意到这个,就不用对答案再排序了……(我就没看到,又写了个快排)
2.题目没说字符串有多长,于是我用的string去规避这个问题,其实搞个比较大的char数组也是可以的。
3.这题比较奇葩……有个dict.txt,在网页上给出链接了,但其内容很大。我不知道他想要我当做输入文件去读,还是直接存到代码里。
当我用ifstream去读时,发现读不到,不知是不是我读错了。于是我把它写到了代码的初始化部分,代码瞬间变成了100K,USACO服务器真好……
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
1、namenum.cpp
/*
ID: icedrea1
PROB: namenum
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; void qsort(string str[],int l,int r)
{
if(l>=r) return;
int i=l,j=r;
string x=str[(l+r)>>];
while(true)
{
while(str[i]<x) ++i;
while(str[j]>x) --j;
if(i>j) break;
swap(str[i],str[j]);
++i; --j;
}
qsort(str,l,j); qsort(str,i,r);
} bool same(string name,string num)
{
if(name.size()!=num.size()) return false;
for(int i=;i!=num.size();++i)
{
switch(num[i])
{
case '':
if(name[i]!='A' && name[i]!='B' && name[i]!='C') return false;
break;
case '':
if(name[i]!='D' && name[i]!='E' && name[i]!='F') return false;
break;
case '':
if(name[i]!='G' && name[i]!='H' && name[i]!='I') return false;
break;
case '':
if(name[i]!='J' && name[i]!='K' && name[i]!='L') return false;
break;
case '':
if(name[i]!='M' && name[i]!='N' && name[i]!='O') return false;
break;
case '':
if(name[i]!='P' && name[i]!='R' && name[i]!='S') return false;
break;
case '':
if(name[i]!='T' && name[i]!='U' && name[i]!='V') return false;
break;
case '':
if(name[i]!='W' && name[i]!='X' && name[i]!='Y') return false;
break;
}
}
return true;
} void init(string dict[]); int main()
{
ifstream in("namenum.in");
ofstream out("namenum.out"); int n,s=;
string num,r[],dict[]; getline(in,num); init(dict);
for(int i=;i!=s;++i)
{
if(same(dict[i],num)) r[++n]=dict[i];
} if(!n) out<<"NONE"<<endl;
else
{
qsort(r,,n);
for(int i=;i<=n;++i) out<<r[i]<<endl;
} in.close();
out.close();
return ;
} void init(string dict[])
{
// 用下面的代码生成
}
2、生成字典的代码
#include <iostream>
#include <fstream>
using namespace std; int main()
{
ifstream in("dict.txt");
ofstream out("doc.txt"); string name;
for(int i=;getline(in,name);++i)
out<<"\tdict["<<i<<"]=\""<<name<<"\";"<<endl; in.close();
out.close();
return ;
}
USACO Section1.2 Name That Number 解题报告的更多相关文章
- USACO Section1.4 Mother's Milk 解题报告
milk3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.1 Friday the Thirteenth 解题报告
friday解题报告 —— icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...
- USACO Section1.3 Ski Course Design 解题报告
skidesign解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- 【九度OJ】题目1040:Prime Number 解题报告
[九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...
- 【LeetCode】Largest Number 解题报告
[LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...
- 【LeetCode】306. Additive Number 解题报告(Python)
[LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 「USACO 1.3」 Name That Number 解题报告
\(注意 该篇题解为本人较早时期写的题解 所以会很傻 直接能用map 以string为下标偏偏要绕弯儿 有时间改一改QAQ\) [USACO1.2]Name That Number 题目描述 在威斯康 ...
- USACO Section 1.2 Name That Number 解题报告
题目 题目描述 在一个农场里面,每一头牛都有一个数字编号,但是现在这些牛不喜欢这种编号,它们想把这些数字编号转化成为可以接受的字母的形式.数字与字母的转换表如下: 2: A,B,C 5: J,K,L ...
- ACM Minimum Inversion Number 解题报告 -线段树
C - Minimum Inversion Number Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &a ...
随机推荐
- Python 看书的一些记录 运算符重载
1.类和模块有什么关系? (1)类是模块的一部分,是模块对象的属性. (2)类和模块都是命名空间,但是类是对于语法的.模块是对于文件的 (3)类支持多个实例,但是模块被导入时只有一个. 2.什么是抽象 ...
- HashMap扩容
前言:当您在读该文章的时候,我认为您已经知道HashMap的底层实现原理,如果您还不清楚HashMap是如何实现的,请先去了解,再回来看本文章. 1.HashMap什么时候扩容? HashMap的容量 ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) D】精简改良(状压DP)
点此看题面 大致题意: 给你一张图,定义\(dis(i,j)\)为\(i\)与\(j\)的最短距离,现要求删去若干条边,使得图仍然联通,且\(\sum_{i=1}^n\sum_{j=i+1}^ndis ...
- #WPF的3D开发技术基础梳理
原文:#WPF的3D开发技术基础梳理 自学WPF已经有半年有余了,一遍用,一边学.但是一直没有去触摸WPF的3D开发相关技术,因为总觉得在内心是一座大山,觉得自己没有能力去逾越.最近因为一个项目的相关 ...
- 2017.11.14 C语言---指针的学习
第八章 善于利用指针 (1)指针是什么 1.内存区每一个字节都有一个编号,这就是"地址".地址形象化的被称为"指针".它能通过以它为地址的内存单元.地址指向(* ...
- 2017.9.29 web网上答题及其自动评测系统
1. 设计计一个网上答题及其自动评测系统,首先是试题页面的设计及其解答的提交, 其次是当提交解答之后,系统自动评阅并给出结果. 分析:需要两个jsp页面:一个是提交信息的页面,另一个是获取提交信息的页 ...
- Hive 配置显示表头和数据库信息
在 conf/hive-site.xml 中添加如下配置 <property> <name>hive.cli.print.header</name> <val ...
- data-ng-init 指令
1.data-ng-init指令为AngularJS应用程序定义了一个初始值. 2.通常情况下,data-ng-init指令并不常用,将会使用控制器或模块来代替它.
- rectified units
from: http://en.wikipedia.org/wiki/Rectifier_(neural_networks) In the context of artificial neural n ...
- web的监听器,你需要知道这些...
一.简介 Listener是Servlet规范的另一个高级特性,它用于监听java web程序的事件,例如创建.修改.删除session,request,context等,并触发相应的处理事件,这个处 ...