Live2D

洛谷-P9950 [USACO20FEB] Mad Scientist B

题目用到算法:双指针(真的是吗)

直链🔗

· 注:在没有特殊标识前都为自己做时的想法,不能保证正确

题意

给出A,B两个字串,有一种特殊转换:可以选择一个区间 \(a_{i}\)\(a_{j}\) 可以让这个区间内 H 变成 G 反之同理。问进过多少遍这个变换可以让A于B完全相同。

思路

第一眼思路输入的时候进行对比哪一个 bool 数组将已经相同的标记为 1 反之标记为 0。然后进行判断看看有几个连续子串 0 则输出几。废话不多说开始写以下是代码 :

#include<bits/stdc++.h>
using namespace std;

const int N=1500;

int n;
char a[N],b[N];
bool fl[N];
int ans;

int main()
{
    cin>>n;

    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        if(b[i]==a[i])fl[i]=1;
        else fl[i]=0;
    }

    for(int i=1;i<=n;i++)
    {
        if(fl[i]==0)
        {
            for(int j=i;j<=n;j++)
            {
                if(fl[j]!=0)
                {
                    //cout<<i<<" "<<j<<endl;
                    i=j-1;
                    ans++;
                    break;
                }
            }
        }
    }

    cout<<ans;

    return 0;
}

显然秒杀了。

思考🧐

非常水,但是代码长度还是太长,思路还是太复杂了

留出区域

等到以后的自己填补更短更优质的思路

posted @ 2026-08-24 22:30  小王小王i  阅读(4)  评论(0)    收藏  举报
Live2D