//开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢
//听了同学的 将5000个dict里的字符串 转换成char型数组(不能直接用int 会越界)直接用输入的数据对着转换后的数据查找就可以了 //现在的程序还是太复杂了 没有必要提前把dict中的字符串都存起来 取一个判断一个就好了
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std; typedef struct
{
char num[];
char name[];
}MYDICT;
vector<MYDICT> dict; //vector<>中 最好不要用指针 因为vector对指针是不会复制的 如果之后用指针做了别的操作 vector里的值就都变了 int transName2Num(char * name, char * num)
{
int len = strlen(name);
int i;
int n;
for(i = , n = ; i < len; i++)
{
switch(name[i])
{
case 'A':
case 'B':
case 'C': num[i] = '';break;
case 'D':
case 'E':
case 'F': num[i] = '';break;
case 'G':
case 'H':
case 'I': num[i] = '';break;
case 'J':
case 'K':
case 'L': num[i] = '';break;
case 'M':
case 'N':
case 'O': num[i] = '';break;
case 'P':
case 'R':
case 'S': num[i] = '';break;
case 'T':
case 'U':
case 'V': num[i] = '';break;
case 'W':
case 'X':
case 'Y': num[i] = '';break;
default: break;
}
}
num[len] = '\0';
return ;
} int main()
{
MYDICT tmp;
int flag = ;
FILE * intxt, *out;
char name[];
char num[];
char name3[];
fstream in;
in.open("namenum.in", ios::in);
intxt = fopen("dict.txt", "r");
out = fopen("namenum.out", "w"); char innum[];
in >> innum;
do
{
fscanf(intxt,"%s", name);
transName2Num(name, num);
strcpy(tmp.name,name);
strcpy(tmp.num,num);
dict.push_back(tmp);
}while(strcmp(name, "ZYTA") != ); vector<MYDICT>::const_iterator it2; for(it2 = dict.begin(); it2 < dict.end(); it2++)
{
strcpy(name3,(*it2).num);
if(strcmp(name3,innum) == )
{
fprintf(out, "%s\n", (*it2).name);
flag = ;
}
} if(flag == )
{
fprintf(out, "NONE\n");
} return ;
}

自己的代码还是太复杂了 下面是答案的 超精简

#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main() {
FILE *in = fopen ("namenum.in", "r");
FILE *in2 = fopen ("dict.txt", "r");
FILE *out = fopen ("namenum.out","w");
int nsolutions = ;
int numlen;
char word[], num[], *p, *q, map[];
int i, j;
map['A'] = map['B'] = map['C'] = '';
map['D'] = map['E'] = map['F'] = '';
map['G'] = map['H'] = map['I'] = '';
map['J'] = map['K'] = map['L'] = '';
map['M'] = map['N'] = map['O'] = '';
map['P'] = map['R'] = map['S'] = '';
map['T'] = map['U'] = map['V'] = '';
map['W'] = map['X'] = map['Y'] = '';
fscanf (in, "%s",num);
numlen = strlen(num);
while (fscanf (in2, "%s", word) != EOF) {
for (p=word, q=num; *p && *q; p++, q++) {
if (map[*p] != *q)
break;
}
if (*p == '\0' && *q == '\0') {
fprintf (out, "%s\n", word);
nsolutions++;
}
}
if (nsolutions == ) fprintf(out,"NONE\n");
return ;
}

【USACO】namenum的更多相关文章

  1. POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)

    POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...

  2. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  3. 1519: 【USACO】超级书架

    1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...

  4. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...

  5. 【CPLUSOJ】【USACO】【差分约束】排队(layout)

    [题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...

  6. 【USACO】Dining

    [题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...

  7. 【USACO】Optimal Milking

    题目链接 :        [POJ]点击打开链接        [caioj]点击打开链接 算法 : 1:跑一遍弗洛伊德,求出点与点之间的最短路径 2:二分答案,二分”最大值最小“ 3.1:建边,将 ...

  8. 【USACO】 Balanced Photo

    [题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...

  9. 【USACO】 Balanced Lineup

    [题目链接] 点击打开链接 [算法] 这是一道经典的最值查询(RMQ)问题. 我们首先想到线段树.但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解. 稀疏表算法.其实也是一种动态 ...

随机推荐

  1. Excel 计算 tips

    1.  对一列数据想看看,distinct的结果 选中数据区域(包含列名),插入pivot table 2. 想检查一个单元格的值在不在某一列中,并返回标志值 =IF (COUNTIF(B:B,A1) ...

  2. 积木(DP)问题

    问题:Do you remember our children time? When we are children, we are interesting in almost everything ...

  3. PHP中soap的使用例子

    PHP 使用soap有两种方式. 一.用wsdl文件 服务器端. <?phpclass service{ public function HelloWorld() { return " ...

  4. 彻底理解position与anchorPoint

    引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置?CALayer的position点是哪一点呢?anchorPoint与positio ...

  5. css中的id和css的区别

    在样式表定义一个样式的时候,可以定义id也可以定义class. 1.在CSS文件里书写时,ID加前缀"#":CLASS用"." 2.id一个页面只可以使用一次: ...

  6. 初试visual studio2012的新型数据库LocalDB

    http://www.cnblogs.com/zhangran/archive/2012/08/21/2649200.html 今天在vs2012里面打开以前的mvc3项目,结果弹出警告说在vs201 ...

  7. Spring学习8-SSH+Log4j黄金整合

    最下面有log4j的详解及配置步骤 步骤一.导入相应的jar包(具体参看下一篇博文) 步骤二.修改WEB.XML文件,内容如下: <?xml version="1.0" en ...

  8. 百度或者Google---SEO优化(转载)

    google 和百度的技术差别: 1.百度还认不清哪个是原创的 2.google蜘蛛不够百度快 4.google排名结果随时变化 流量.权重.权威.内容.用户体验.用户关注度等等细节的排名,已表 达了 ...

  9. struts2 + ajax + json的结合使用,实例讲解

    struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4 ...

  10. C++_Eigen函数库用法笔记——Block Operations

    Using block operations rvalue, i.e. it was only read from lvalues, i.e. you can assign to a block Co ...