//开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢
//听了同学的 将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. POJ2823 Sliding Window

    Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53086   Accepted: 15227 Case Time Limi ...

  2. Bsoj 1322 第K小数

    第K小数 Description 现在已有N个整数,你有以下三种操作: 1 A:表示加入一个值为A的整数: 2 B:表示删除其中值为B的整数: 3 K:表示输出这些整数中第K小的数: Input 第一 ...

  3. groovy–运算符重载

    Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象. 下面的表格描述了groovy中的操作符所映 ...

  4. html5+监听设备加速度变化信息

    watchAcceleration 监听设备加速度变化信息 Number plus.accelerometer.watchAcceleration( successCB, errorCB, optio ...

  5. C++标准库异常类

    C++标准库异常类 2012-12-24 16:27 5269人阅读 评论(1) 收藏 举报  分类: c/c++(36)  C++标准库异常类继承层次中的根类为exception,其定义在excep ...

  6. Linux下远程cp命令scp

    2014-2.19  PS1.在用此命令cpLinux与Linux之间的数据时发现有些服务器上默认没有安装scp但用yum -y install scp提示么有这样的包 后来发现原来scp工具的安装包 ...

  7. 一张图解释Hadoop IPC

    基于hadoop2.6.2.... 一张图Server启动,Client访问..... RPC是IPC的一种,IPC还有另外一种LPC,相关请看参考中的3 使用hadoop ipc步骤: 1.定义RP ...

  8. POJ 1054 The Troublesome Frog

    The Troublesome Frog Time Limit: 5000MS Memory Limit: 100000K Total Submissions: 9581 Accepted: 2883 ...

  9. thinkphp中模块和操作映射

    模板和操作映射功能是3.1.2版本支持的对模块和操作设置的映射机制,由于可以通过改变配置动态改变(实际真正改变,并非别名)URL访问地址,加强了应用的安全性,而且,映射机制具有URL不区分大小写访问的 ...

  10. cocos2dx的内存管理机制

    首先我们必须说一下c++中变量的内存空间的分配问题,我们在c++中写一个类,可以在栈上分配内存空间也可以使用new在堆上分配内存空间,如果类对象是在栈上分配的内存空间,这个内存空间的管理就不是我们的事 ...