P9887题解
Spark_King · · 题解
P9887 题解
初步分析
这道题大概率就是一道推理题。
首先,题目中
于是,我们可以将这两种状态转化为另一个
如图:
其中,在
这样一来,我们就可以愉快地进行下一步了。
深入思考
题目要求我们对两个字符串分别进行区间取反操作,也就是将上述
(这里我们先定义整型变量
此时,我们就可以正式开始敲代码了。
代码实现
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T;
ll n;
string s, t;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//快读
cin >> T;
while (T--) {
cin >> n >> s >> t;
ll k = 0;//用于记录上述不相等的子串的个数
bool flag = 0;
for (ll i = 0; i < n; i++) {
if (s[i] != t[i] && flag == 0) k++, flag = 1;
else if (s[i] == t[i]) flag = 0;
}//遍历字符串
if (k > 2) cout << "0\n";
else if (k == 2) cout << "6\n";
else if (k == 1) cout << 2 * (n - 1) << "\n";
else cout << n*(n + 1) / 2 << "\n";
//按照上一板块的分类输出答案
}
return 0;//结束程序
}