【USACO】namenum
//开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢
//听了同学的 将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的更多相关文章
- POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...
- 1642: 【USACO】Payback(还债)
1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...
- 1519: 【USACO】超级书架
1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...
- Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
[USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...
- 【CPLUSOJ】【USACO】【差分约束】排队(layout)
[题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...
- 【USACO】Dining
[题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...
- 【USACO】Optimal Milking
题目链接 : [POJ]点击打开链接 [caioj]点击打开链接 算法 : 1:跑一遍弗洛伊德,求出点与点之间的最短路径 2:二分答案,二分”最大值最小“ 3.1:建边,将 ...
- 【USACO】 Balanced Photo
[题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...
- 【USACO】 Balanced Lineup
[题目链接] 点击打开链接 [算法] 这是一道经典的最值查询(RMQ)问题. 我们首先想到线段树.但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解. 稀疏表算法.其实也是一种动态 ...
随机推荐
- Java编程思想学习(六) 多态
1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位 ...
- ci创建zip
public function createZip() { $this->load->library("zip"); $name = "test.text&q ...
- Java初学(六)
一.final(最终)可以修饰类.方法.变量 特点:final修饰类,该类不能被继承 final修饰方法,该方法不能被重写(覆盖.重载.复写) final修饰变量,该变量不能被重新赋值. ...
- Why The Golden Age Of Machine Learning is Just Beginning
Why The Golden Age Of Machine Learning is Just Beginning Even though the buzz around neural networks ...
- 通过ajax访问aspx的CodeBehind中的方法
引言 在项目中突然看到,aspx中的ajax可以访问aspx.cs中的方法,觉得很新奇,也许是lz少见多怪,不过,真的有发现新大陆似的那种兴奋,你也许知道这代表什么,学会了这种方式,代表你以后,可以建 ...
- C++中map的一点疑惑...
int CRuntimePara::getInt(const string& strKey,int iDefault){ map<string,string>::const_ite ...
- 【原创】angularjs1.3.0源码解析之scope
Angular作用域 前言 之前我们探讨过Angular的执行流程,在一切准备工作就绪后(我是指所有directive和service都装载完毕),接下来其实就是编译dom(从指定的根节点开始遍历do ...
- 利用ADSL拨号上网方式如何搭建服务器
序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP. 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一. ...
- Bookshelf 2
Bookshelf 2 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- js实现把网页table导成Excel
//导出excel function exportExcel(DivID,strTitle){ if(DivID==null) { return false; } var jXls, myWorkbo ...