USACO-1.2.3 Name That Number

题目链接:http://cerberus.delos.com:790/usacoprob2?a=Emp6KiAXNKv&S=namenum

一看到这个题目就想到了map和mutimap。刚好可以学习一下容器。但是不知道为什么就一直错。后来才看到原来是数据坑爹了,这个数据太坑爹了。仔细看才发现它的字母表里面没有Q,导致我前面一直错。后来改过来就对了。

/*
ID:sunexio2
PROG:namenum
LANG:C++
 */
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <cmath>
using namespace std;

map<int, char> m;
multimap<double, string> mm;
int main(){
	char c = 'A';
	for(char i = 2; i <= 6; ++i, c += 3)
		m[c] = m[c + 1] = m[c + 2] = i;
	m['P'] = m['R'] = m['S'] = 7;
	m['T'] = m['U'] = m['V'] = 8;
	m['W'] = m['X'] = m['Y'] = 9;
	//m['z'] = '0';
	ifstream tin("dict.txt");
	string str;
	while(tin >> str){
		double d = 0;
		for(int i = 0; i < str.length(); ++i)
			d = d * 10 + m[str[i]];
		mm.insert(pair<double, string>(d, str));
	}
	//fin.close();
	ifstream fin("namenum.in");
	ofstream fout("namenum.out");
    double tmp;
	while(fin >> tmp){
		multimap<double, string>::iterator it;
		bool flag = 1;
		for(it = mm.begin(); it != mm.end(); ++it)
		{
			if(abs(it->first - tmp) <= 0)
			{
				fout << it->second << endl;
				flag = 0;
			}
		}
		if(flag) fout << "NONE" << endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值