洛谷-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;
}
显然秒杀了。
思考🧐
非常水,但是代码长度还是太长,思路还是太复杂了
留出区域
等到以后的自己填补更短更优质的思路

浙公网安备 33010602011771号