luogu 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\n"); // break; return 0; } } printf("%s",y); // cout<<y<<endl; return 0; }
题解上还有一种枚举的做法,没有上面的那么巧妙,但是也不错的\(^o^)/~
话说贴题解之前,我要先介绍一下char和string的区别:
String 是字符串
char是字符
再结合代码仔细看看吧\(^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\n"); return 0; } } printf("%s",ans); return 0; }
特别注意,ans[i]=x[i]+1;不能写成ans[i]=x[i];
啦啦啦写完啦~\(≧▽≦)/~啦啦啦哈哈哈^_^
风过林梢,骄阳正好
彼时他们正当年少。