zoukankan      html  css  js  c++  java
  • USACO NameThatNumber

      就是给你一串数字, 每个数字可以翻译成三个字母, 有一个奶牛姓名表, 输入一串数字然后求出数字可以表示的姓名看看姓名表里面有没有, 有的话输出来,暴力+二分查找即可:

    /*
        ID: m1500293
        LANG: C++
        PROG: namenum
    */
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    char validname[5000][15];
    int validnum;
    
    void getname()
    {
        validnum = 0;
        FILE *dict = fopen("dict.txt", "r");
        while(!feof(dict))
        {
            fscanf(dict, "%s", validname[validnum++]);
        }
    }
    
    char strr[12][5] = {"000", "000", "ABC", "DEF", "GHI", "JKL", "MNO", 
                       "PRS", "TUV", "WXY" };
    
    int check(char str[])
    {
        int res = -1;
        int l=0, r=validnum-1;
        while(l <= r)
        {
            int mid = (l+r)/2;
            int tp = strcmp(validname[mid], str);
            if(tp == 0)
            {
                res = mid;
                break;
            }
            else if(tp > 0) r = mid-1;
            else l = mid + 1;
        }
        if(res == -1) return 0;
        else return 1;
    }
    
    char input[15];
    int len;
    bool flog;
    void dfs(int dept, char str[])
    {
        //printf("%d
    ", dept);
        if(dept == len)
        {
            str[dept] = '';
        //    printf("%s
    ", str);
            if(check(str))
            {
                printf("%s
    ", str);
                flog = true;
            }
            return ;
        }
        for(int i=0; i<3; i++)
        {
            str[dept] = strr[input[dept]-'0'][i];
            dfs(dept+1, str); 
        }
    }
    
    int main()
    {
        freopen("namenum.in", "r", stdin);
        freopen("namenum.out", "w", stdout);
        getname();
        while(scanf("%s", input)!=EOF)
        {
            char str[20];
            flog = false;  
            len = strlen(input);
            dfs(0, str);
            if(!flog) printf("NONE
    ");
        }
        return 0;
    }    
  • 相关阅读:
    JavaScript语言精粹_第二章
    java并发Executors学习笔记
    iOS开发响应者链触摸事件
    快速学会Spring动态代理原理
    iOS类别Category与扩展Extension
    几款iOS开发常用工具
    Java回调接口的理解
    零基础学iPhone开发
    Java中的多线程
    Java文件下载的几种方式
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5055446.html
Copyright © 2011-2022 走看看