专栏文章
题解:CF1840E Character Blocking
CF1840E题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipaf3oa
- 此快照首次捕获于
- 2025/12/03 08:47 3 个月前
- 此快照最后确认于
- 2025/12/03 08:47 3 个月前
题意
有三种操作:
- 锁定机制:让位置 在 秒内被忽略。
- 交换操作:交换当前未被锁定的字符。
- 比较操作:遍历所有位置,比较当前未被锁定的字符是否相等。
思路
- 记录锁定结束时间。
- 维护实际字符。
- 遍历,跳过锁定的字符,比较剩余字符即可。
代码
CPP#include<bits/stdc++.h>
using namespace std;
int main() {
int T;//多测
cin >> T;
while (T--) {
string s1, s2;
cin >> s1 >> s2;//输入字符串
int n = s1.length();//记录长度
int t, q;
cin >> t >> q;
vector<int> d(n + 1, 0);
vector<int> xx(n + 1), yy(n + 1);
for (int i = 1; i <= n; ++i) {
xx[i] = i;
yy[i] = i;
}
for (int j = 1; j <= q; ++j) {
int type;
cin >> type;
if (type == 1) {
int pos;
cin >> pos;
d[pos] = j + t;
} else if (type == 2) {
int a1, a2, b1, b2;
cin >> a1 >> a2 >> b1 >> b2;
if (a1 == 1 && b1 == 1) {
swap(xx[a2], xx[b2]);//进行交换
} else if (a1 == 1 && b1 == 2) {
swap(xx[a2], yy[b2]);
} else if (a1 == 2 && b1 == 1) {
swap(yy[a2], xx[b2]);
} else {
swap(yy[a2], yy[b2]);
}
} else {
bool flag = true;//标记
for (int i = 1; i <= n; ++i) {
if (d[i] > j){
continue;
}
if (s1[xx[i] - 1] != s2[yy[i] - 1]) {
flag = false;//不符合
break;//直接退出循环
}
}
cout << (flag ? "YES" : "NO") << endl;//三目运算
}
}
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...