1 条题解

  • 0
    @ 2025-8-24 21:53:31

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar bjrjk
    **

    搬运于2025-08-24 21:53:31,当前版本为作者最后更新于2018-06-27 18:17:06,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    过了一个高三,把OI全都忘光了,写写这道题练练手。

    我看这道题目的题解,大家好像都没有写的感觉太好的。所以把自己的题解发一下。里面用到了stl等等各种奇技淫巧,大家可以学习一下。^v^

    题目给的翻译、输入输出根本不能看。去USACO Section 1.3节自己找一下Dict进行参考即可。

    #include<bits/stdc++.h>
    using namespace std;
    vector<string> Dict; //用Dict存放所有字典中的名字
    string str; //给定的编号
    const char * str_trans = "2223334445556667 77888999"; //使用该C-风格字符串来存放A-Z(除去Q和Z这24个字母所对应的数字)
    int main(){
        ios::sync_with_stdio(false); //只用cin/cout加快IO速度
        cin >> str;
        string tmp;
        while (cin >> tmp){ //将后面所有的字符串循环读入到tmp中,再放到Vector尾,(cin>>tmp)即可以起到读入字符串的作用,也可以起到判断文件是否到达末尾。详情请阅读C++ Primer Plus。
            Dict.push_back(tmp);
        }
        int len = str.length();
        bool global_flag = false;
        for (int i = 0; i < Dict.size(); i++){ //遍历所有字典元素,因为字典元素少
            if (len != Dict[i].length())continue; //剪枝,如果字符串位数不一样就没有必要比较。
            bool flag = true;
            for (int j = 0; j < len; j++){
                if (str_trans[Dict[i][j] - 'A'] != str[j]){ //比对字典中每个字符对应的数字是否与输入的每个数字相同
                    flag = false; //不相同直接跳出循环
                    break;
                }
            }
            if (flag){ //相同则输出该单词
                cout << Dict[i] << endl;
                global_flag = true;
            }
        }
        if (!global_flag){ //如果没有一个单词符合要求,就输出NONE。
            cout << "NONE" << endl;
        }
    }
    
    • 1

    [USACO1.2] 命名那个数字 Name That Number

    信息

    ID
    2763
    时间
    1000ms
    内存
    225MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者