原题链接:蓝桥杯2023年第十四届省赛真题-翻转
解题思路:
注意事项:
参考代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int d,sum=0,op=1;
string t,s;
cin>>d;
int d_ = d;//记录d后面输出ans结果用
int ans[d];//记录各组值
while(d--){
cin>>t;
cin>>s;
if(t[0]!=s[0]||t[t.length()-1]!=s[s.length()-1]){
//先判断首尾,首尾不同就可以直接返回-1
ans[d]=-1;
continue;
}
//对s字符串逐字比对
for(int i=1;i<s.length()-1;i++){
if(s[i]==t[i]) continue;
else if(s[i]!=t[i]){//出现需要翻转的地方
//是否满足i前[i-1]后[i+1]值一致且 是否等于t[i]
if(s[i+1]==t[i+1]&&s[i+1]==s[i-1]&&s[i+1]==t[i]){
s[i]=t[i];
sum++;//翻转次数加1
}
else{//无法通过翻转条件
ans[d]=-1;
op=0;//防止后面再次计入ans数组的管理变量
break;
}
}
}
if(op) {//防止覆盖-1
ans[d]=sum;
}
sum=0;
op=1;
}
for(int i=d_-1;i>=0;i--){
cout<<ans[i]<<endl;
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复