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

    AFSIndividual.py import numpy as np import ObjFunction import copy class AFSIndividual: "" ...

  2. TCP/IP详解 学习三

    网际协议 ip Ip 是不可靠和无连接的 ip首部 4个字节的 32 bit值以下面的次序传输:首先是 0-7 bit,其次 8-15 bit,然后 1 6-23 bit,最后是 24~31 bit. ...

  3. 五种开源协议的比较(BSD_Apache_GPL_LGPL_MIT)

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses/alphabetic ...

  4. String类的常用方法

    package stringUse; public class StringUse { public static void main(String[] args) { //获取 //indexOf, ...

  5. MyEclipse------带进度条的输入流

    other.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  6. linux学习笔记二-----文件权限管理

    一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...

  7. rsyslog 与 logrotate 服务

    rsyslog与logrotate服务 rsyslog 负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件. 一.rsyslog rsyslog 是一个 syslogd 的多线 ...

  8. Serenity框架官方文档翻译3.2(多租户)

    3.2多租户 在本教程中我们将把Norhwind变成一个多租户应用程序. 这是一个维基百科的多租户软件定义: 软件多租户是指一个软件架构的一个实例软件运行在一个服务器和多个租户.租户是一组共享一个公共 ...

  9. R与JAVA的整合

    R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的函数,互相 ...

  10. HDOJ 1536 S-Nim

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...