• 西安电子科技大学第16届程序设计竞赛 B Words Game


    链接:https://www.nowcoder.com/acm/contest/107/B
    来源:牛客网

    Words Game
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题目描述

    有一款英语练习游戏是这样的,每次会给出一些字母,然后需要你从中拼出一个最长的英文单词。
    虽然williamchen的英语非常差,但是他现在搞到了一本英语词典,他只需要在词典里找出一个最长的符合条件的字母即可。
    现在你需要写一个程序来帮助他完成这个任务。

    输入描述:

    包含多组测试数据,每组数据开始一行包含不超过20个字母,表示游戏给出的字母。
    接下来是一行一个数字N(1 <= N <= 1000)
    接下来N行,每行一个字符串表示词典中的单词,单词长度不会超过10。

    输出描述:

    每组数据输出一行,表示最长可能拼出的单词长度,如果一个单词都拼不出,那就输出0。
    示例1

    输入

    masterblodpo
    7
    boogie
    magnolia
    punch
    blood
    master
    inherent
    phantom
    ablderrivala
    5
    arrival
    blade
    runner
    incendies
    sicario

    输出

    6
    7

    只要找到一个就可以了,那么遍历一遍
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const ll mod=1e9+7;
     
    struct node
    {
        char c[15];
        int l;
    }a[1005];
     
    bool cmp(node x,node y)
    {
        return x.l>y.l;
    }
    int main()
    {
        char s[35];
       while(cin>>s)
        {
            int l=strlen(s);
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i].c;
            a[i].l=strlen(a[i].c);
        }
        sort(a+1,a+1+n,cmp);//排个序,这样一旦找到一个就可以跳出了,防止超时
        int ma=0;
                int p=0;
        for(int i=1;i<=n;i++)
        {
               p=0;
            int st=0;
            bool f=0;
            for(int j=0;j<a[i].l;j++)
            {
                f=0;
                for(int k=st;k<l;k++)
                {
                    if(s[k]==a[i].c[j])//找到一个相同的字母,
                    {
                        p++;
                        st=k;//开始的位置要变了,为了保持相对顺序
                        f=1;
                        break;
                    }
                }
                if(!f)
                {
                    break;
                }
            }
            if(f)
            {
                break;
            }
        }
        cout<<p<<endl;
        }
        return 0;
    }

    也可以写的简短一点

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char x[22],y[22];
        int i,j,t,n,m,k,max;
        while(scanf("%s",x)!=EOF)
        {
            k=strlen(x);
            max=0;
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                t=0;
                scanf("%s",y);
                m=strlen(y);
                for(j=0;j<k;j++)
                  if(y[t]==x[j])
                    t++;
                if(t==m&&m>max)
                  max=m;
            }
            printf("%d
    ",max);
        }  
    }
    View Code
  • 相关阅读:
    URL编码与解码
    什么通用数据交换格式更好
    JSON(JavaScript Object Notation)
    二维码与json都是数据交换格式
    数据的存在形式
    NSData、数据结构与数据转换
    物理结构与逻辑结构
    NSKeyedArchiver : NSCoder
    The Role of View Controllers
    Content-Type与MIME
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8903972.html
Copyright © 2020-2023  润新知