题解:P13888 [蓝桥杯 2023 省 Python A] 翻转

· · 题解

题意

有两个 01ST,当与其相邻的两个数字都与它不同,便可以将其反转,问最少翻转多少次可以让 S = T

题解

感觉真的不配黄题。

直接循环遍历,然后如果 S_i \ne T_i,就判断一下看看能不能改,如果不能改就打个标记,否则就每一次统计一下答案,然后再注意判断一下第一个字符和最后一个字符,大概就这些。

正确代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        string s,t;
        cin>>t>>s;//要先输入t再输入s
        bool flag = 0;
        int ans = 0;
        for(int i=0;i<s.size();i++)
        {
            if(i==0||i==s.size()-1)
            {
                if(s[i]!=t[i])
                {
                    flag = 1;
                    puts("-1");
                    break;
                }
            }
            else
            {
                if(s[i]!=t[i])
                {
                    if(s[i+1]!=s[i]&&s[i-1]!=s[i])
                    {
                        ans++;
                    }
                    else 
                    {
                        flag = 1;
                        puts("-1");
                        break;
                    }
                }
            }
        }
        if(!flag) printf("%d\n",ans);
    }
}