交换
jzoj 1518
题目大意:
有两个字符串(只包含‘R’‘G’‘B’三个字符,且相邻的字符互不相同),现在要交换两个字符串中的一个数,使两个字符串内都各有3个连续且相同的字符,问有多少种换法
样例输入
RGBRBR
BRBGRG
样例输出
1
数据范围限制
两个字符串长度都不超过50,不小于3,且任意两个相邻的字符都不相同。
提示
解题思路:
直接模拟每一种交换,然后判断即可
代码:
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
int l1,l2,ans,a[60],b[60];
string str;
int main()
{cin>>str;l1=str.size();for (int i=0;i<l1;++i)if (str[i]=='R') a[i+1]=1;//预处理else if (str[i]=='G') a[i+1]=2;else if (str[i]=='B') a[i+1]=3;cin>>str;l2=str.size();for (int i=0;i<l2;++i)if (str[i]=='R') b[i+1]=1;//预处理else if (str[i]=='G') b[i+1]=2;else if (str[i]=='B') b[i+1]=3;for (int i=1;i<=l1;++i)for (int j=1;j<=l2;++j)if (a[i-1]==b[j]&&b[j]==a[i+1]&&b[j-1]==a[i]&&a[i]==b[j+1]) ans++;//判断printf("%d",ans);
}