夯实基础——P3742 umi的函数

题目链接:https://www.luogu.org/problem/P3742

P3742 umi的函数

题目背景

umi 找到了一个神秘的函数 f。

题目描述

这个函数接受两个字符串 s1,s2。这些字符串只能由小写字母组成,并且具有相同的长度。这个函数的输出是另一个长度与 s1,s2 相同的字符串 g。g 的第 i 个字符等于 s1 的第i 个字符和 s2 的第 i 个字符的最小值,简单来说,g[i]=min(s1[i],s2[i])。

例如:f("ab","ba")= "aa", f("nzwzl","zizez")="niwel".

她现在有两个相同长度的只有小写字母的字符串 x,y。找出任何一个满足 f(x,z)=y 的

字符串 z。如果找不到这样的字符串的话,请输出-1。

输入格式

第一行给出以下两个字符串的长度 n。

第二行给出一个字符串 x。

第三行给出一个字符串 y。

输出格式

第一行输出一个字符串,代表你找到的符合条件的字符串。找不到的话,请输出-1。

输入输出样例

输入 #1
2
ab
aa
输出 #1
ba
输入 #2
5
nzwzl
niwel
输出 #2
xiyez
输入 #3
2
ab
ba
输出 #3
-1

说明/提示

对于 100%的数据,1<=n<=100。

这道题我竟然想歪了,原因就是没有仔细读题,注意“找出任何一个满足 f(x,z)=y 的字符串 z”中的“任何”!!!说明了此题有多个解!!!而答案只让输出其中的一个解,所以这道题的最佳做法就出来了

最佳做法:在读入的时候判断一下是否合法,如果不合法,就输出-1,否则就直接输出字符串y

上代码:

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 string a,b;
 7 
 8 int n;
 9 
10 int main()
11 {
12     cin>>n>>a>>b;
13     int len=a.size();
14     for(int i=0;i<len;i++)
15     if(a[i]<b[i]) { cout<<-1<<endl; return 0; }
16     cout<<b<<endl;
17     return 0;
18 }

最佳做法说完了,然后再谈谈我我自己的想法。

首先是判断输入是否合法,然后对于最终得到的字符串y和原先的字符串x进行一位一位的求解。我们首先知道字符串y中的字符肯定要比字符串x中的字符小,所以我们对字符串y中的字符+5(不要问我5是怎么得来的,我也不知道。原来尝试的是6,但发现wa了9个点,得了64分),这时我们会发现新得到的字符C可能比字符串x中的字符大,即min(x , z) != y。所以接下来就要将字符C不断的减少1,直到min(x , z) == y。

上代码:

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 int a[10010],b[10100],aim[10100],n;//a是字符串x,b是字符串y,aim是字符串z
 7 
 8 int main()
 9 {
10     cin>>n;
11     for(int i=1;i<=n;i++)
12     {
13         char c; cin>>c;
14         a[i]=c-'a';
15     }
16     for(int i=1;i<=n;i++)
17     {
18         char c; cin>>c;
19         aim[i]=c-'a';
20         if(aim[i]>a[i])
21         {
22             cout<<-1<<endl;
23             return 0;
24         }
25     }
26     for(int i=1;i<=n;i++)
27     {
28         b[i]=aim[i]+5;
29         while(min(b[i],a[i])!=aim[i]) b[i]--;
30     }
31     for(int i=1;i<=n;i++)
32     cout<<char(b[i]+'a');
33     return 0;
34 }

夯实基础,认真做好每一道题!!!

2019-08-07

本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。

posted on 2019-08-07 11:32  Gmax  阅读(281)  评论(0编辑  收藏  举报