USACO1.2 Name That Number(namenum)

        本题方法较多,这里使用一种比较笨重的方法。将dict.txt中的string全部计算出其对应值,注意要使用long long类型保存,然后make_pair(string,long long)存进map,从头开始检查iter->second是否等于输入的number,如果相等就输出it->first,直到iter==map.end;如果没有检测到相等的,就输出"NONE"。

 

/*
ID:jzzlee1
PROG:namenum
LANG:C++
*/
#include <fstream>
#include <string>
#include<iostream>
#include <algorithm>
#include <cstdio>
#include<map>
#include<utility>
using namespace std;
ifstream fin("dict.txt");
ifstream fin2("namenum.in");
ofstream fout("namenum.out");
int char_num(char ch)
{
	switch(ch)
	{
	case'A':
	case'B':
	case'C':
		return 2;
	case'D':
	case'E':
	case'F':
		return 3;
	case'G':
	case'H':
	case'I':
		return 4;
	case'J':
	case'K':
	case'L':
		return 5;
	case'M':
	case'N':
	case'O':
		return 6;
	case'P':
	case'S':
	case'R':
		return 7;
	case'T':
	case'U':
	case'V':
		return 8;
	case'W':
	case'X':
	case'Y':
		return 9;

	}
}
int main()
{
	string str;long long num;string::size_type i;map<string,long long> maps;
	while(getline(fin,str))
	{
		num=0;
		for(i=0;i!=str.size();i++)
		{
			num=num*10+char_num(str[i]);
		}
		maps.insert(make_pair(str,num));
	}
	long long x;string ex="KRISTOPHER";
	fin2>>x;
	map<string,long long>::iterator iter,it;bool flag=1;
	for(iter=maps.begin();iter!=maps.end();iter++)
	{
		if(iter->second==x)
		{
			fout<<iter->first<<endl;
			flag=0;
		}
	}
	if(flag)
		fout<<"NONE"<<endl;
	return 0;
}

你可能感兴趣的:(USACO)