zoukankan      html  css  js  c++  java
  • Codeforces Round #455 (Div. 2) A. Generate Login【贪心】

    A. Generate Login
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    The preferred way to generate user login in Polygon is to concatenate a prefix of the user's first name and a prefix of their last name, in that order. Each prefix must be non-empty, and any of the prefixes can be the full name. Typically there are multiple possible logins for each person.

    You are given the first and the last name of a user. Return the alphabetically earliest login they can get (regardless of other potential Polygon users).

    As a reminder, a prefix of a string s is its substring which occurs at the beginning of s: "a", "ab", "abc" etc. are prefixes of string "{abcdef}" but "b" and 'bc" are not. A string a is alphabetically earlier than a string b, if a is a prefix of b, or a and b coincide up to some position, and then a has a letter that is alphabetically earlier than the corresponding letter in b: "a" and "ab" are alphabetically earlier than "ac" but "b" and "ba" are alphabetically later than "ac".

    Input

    The input consists of a single line containing two space-separated strings: the first and the last names. Each character of each string is a lowercase English letter. The length of each string is between 1 and 10, inclusive.

    Output

    Output a single string — alphabetically earliest possible login formed from these names. The output should be given in lowercase as well.

    Examples
    input
    harry potter
    output
    hap
    input
    tom riddle
    output
    tomr

    【题意】:题意是求两个字符串的缩写,具体规则就是两个字符串,每个字符串的缩写可以是0 ~ 字符串长度的任意长,然后合并起来,求字母顺序最小的前缀。

    【分析】:substr用于获得子串。

    最直接的解决方案是生成所有可能的登录(通过尝试所有非首字母和姓氏的前缀,并将它们组合),并按字母顺序查找最早的字母。为了获得更快的解决方案,需要进行一些观察。首先,在字母最早的登录名中,姓的前缀总是一个字母; 无论使用两个或多个姓氏字母生成的登录信息,都可以通过删除多余的字母来进一步缩短字母以获得更早的登录信息。其次,名字的前缀不能包含任何大于或等于姓的第一个字母的字母,而不是第一个字母。因此,更好的解决方案是:从第二个字母开始迭代第一个字母的字母。一旦找到大于或等于姓氏第一个字母的字母,停止,并返回所有字母,直到这个字母加上姓氏的第一个字母。如果没有找到这样的信件,则返回整个名字加上姓氏的第一个字母。

    【代码】:

    #include <bits/stdc++.h>
    
    using namespace std;
    string s,ss,s1="zzzzzzzzzz";
    int main()
    {
        cin>>s>>ss;
        for(int i=0;i<s.size();i++)
        {
            for(int j=0;j<ss.size();j++)
            {
                s1=min(s1,s.substr(0,i+1)+ss.substr(0,j+1));
            }
        }
        cout<<s1<<endl;
        return 0;
    }
    贪心
  • 相关阅读:
    js事件入门(6)
    js事件入门(5)
    js事件入门(4)
    js事件入门(3)
    js事件入门(2)
    js事件入门(1)
    js语法基础入门(7)
    js语法基础入门(6)
    spark web ui
    命令行笔记(一)
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8143309.html
Copyright © 2011-2022 走看看