USACO/Name That Number

USACO/Name That Number

Posted by dym on February 15, 2014

本文迁移自老博客,原始链接为 https://seven.blog.ustc.edu.cn/usaconame-that-number/

读取一串数字,然后将数字翻译成与之映射的字母。由于一个数字映射多个字母,所以会产生多个字符串,将其中存在于dict.txt中的字符串输出。 解法:由于文件中共不到五千个字符串,所以可以反向的枚举。枚举文件中的所有字符串,若产生的数字和输入数字相同,则输出。

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
    ofstream fout ("namenum.out");
    ifstream fin ("namenum.in");
    ifstream fin1 ("dict.txt");
    string str;
    int len;
    string num;
    bool flag = false;
    fin>>num;
    while(fin1>>str)
    {
        string tmp;
        len = str.size();
        for(int i = 0; i < len; i++)
        {
            if((str[i] == 'A') || (str[i] == 'B') || (str[i] == 'C'))
            {
                tmp += "2";
            }
            else if((str[i] == 'D') || (str[i] == 'E') || (str[i] == 'F'))
            {
                tmp += "3";
            }
            else if((str[i] == 'G') || (str[i] == 'H') || (str[i] == 'I'))
            {
                tmp += "4";
            }
            else if((str[i] == 'J') || (str[i] == 'K') || (str[i] == 'L'))
            {
                tmp += "5";
            }
            else if((str[i] == 'M') || (str[i] == 'N') || (str[i] == 'O'))
            {
                tmp += "6";
            }
            else if((str[i] == 'P') || (str[i] == 'R') || (str[i] == 'S'))
            {
                tmp += "7";
            }
            else if((str[i] == 'T') || (str[i] == 'U') || (str[i] == 'V'))
            {
                tmp += "8";
            }
            else if((str[i] == 'W') || (str[i] == 'X') || (str[i] == 'Y'))
            {
                tmp += "9";
            }
        }
        if(num == tmp)
        {
            fout<<str<<endl;
            flag = true;
        }
    }
    if(!flag)
        fout<<"NONE"<<endl;
    return 0;
}