luogu umi的函数

这道题很让我头疼的一个地方就是它好像大多数情况下都有多组解╭(╯^╰)╮

P3742 umi的函数

呀( ⊙ o ⊙ )!我并没有做出它,来我们看题解!‘

其实我一开始想骗部分分数来着,因为仔细分析题面,就可知z字符串中,不可能有字符大于x字符串中的对应字符,如果有,就输出-1,但是我字符串用的太不熟了~~~~(>_<)~~~~,还有就是luogu给的第二个测试样例把我搞蒙了,于是我提交了"Hello,World!"骗测试样例O(∩_∩)O哈哈~︿( ̄︶ ̄)︿

这个题一开始没有做出来的原因是,字符串y由x和z取min得到,但题中只给出x和y,我并不知道在这个题中,如何用x串和y串得到z串。

先放上一种超棒的做法

题解上是这样说的:

输出-1的想法和我一样,最妙的就在于对字符串y的输出上:

如果存在y那么,因为y就是由a字符串和y字符串每一位不断取最小得到的,所以y就是z的一组解,直接输出z就好咯︿( ̄︶ ̄)︿O(∩_∩)O哈哈~(^o^)/~(⊙v⊙)(*^◎^*)~(≧▽≦)/~啦啦啦,看代码

不得不说,这个return 0真的太巧妙啦

#include<iostream>
#include<cstdio>

using namespace std;

char x[1001],y[1001];
int main()
{
    int n;
    scanf("%d",&n);
    cin>>x;
    cin>>y;
    for(int i=0;i<=n-1;i++)
    {
        if(x[i]<y[i])
        {
            printf("-1
");
//            break;
            return 0;
        }
    }
        printf("%s",y);
//        cout<<y<<endl;
        return 0;
}

题解上还有一种枚举的做法,没有上面的那么巧妙,但是也不错的(^o^)/~

话说贴题解之前,我要先介绍一下char和string的区别:

String 是字符串

char是字符

char数组可以表示字符串,比如:char[10]就是一个字符串
而String就可以不用定义后面的数组,还有char定义的字符串后面与String定义的字符串相比较起来缺少一个‘终结符’。
 再结合代码仔细看看吧(^o^)/~
#include<iostream>
#include<cstdio>

using namespace std;

char x[1001],y[1001],ans[1001];
int n;
int main()
{
    scanf("%d",&n);
    scanf("%s",x);
    scanf("%s",y);
    for(int i=0;i<=n-1;i++)
    {
        if(x[i]>y[i])
        {
            ans[i]=y[i];
        }
        if(x[i]==y[i])
        {
            ans[i]=x[i]+1;
        }
        if(x[i]<y[i])
        {
            printf("-1
");
            return 0;
        }
    }
    printf("%s",ans);
    return 0;
}

特别注意,ans[i]=x[i]+1;不能写成ans[i]=x[i];

啦啦啦写完啦~(≧▽≦)/~啦啦啦哈哈哈^_^

“为什么圆规能画出圆?” “因为心不变,脚在动。”
原文地址:https://www.cnblogs.com/xrj1229/p/9217548.html