社区讨论

不知道为什么能过

P11146 「SFMOI Round I」Strange Train Game参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhj9v97p
此快照首次捕获于
2025/11/03 23:05
4 个月前
此快照最后确认于
2025/11/03 23:05
4 个月前
查看原帖
我不知道怎么算我写的代码的复杂度,有没有大佬帮我算算
CPP
#include <bits/stdc++.h>
using namespace std;
int n, m, ka[200001], ki[200001];
string s1, s2;
set<int> q[210001];
int main() {
  cin >> n >> m;
  cin >> s1 >> s2;
  int qq = 0;
  for (int i = n; i >= 1; i--) {
    if (s1[i - 1] != s2[i - 1]) qq = i;
    ki[i] = qq;
  }
  for (int i = 1; i <= m; i++) {
    int l, r;
    cin >> l >> r;
    if (ki[l] && ki[l] <= r) q[ki[l]].insert(r);
  }

  for (int i = 1; i <= n; i++) {
    int qs = i;
    for (int s : q[i]) {
      if (ki[qs] <= s) q[ki[qs]].insert(s);
      qs = s + 1;
    }
    if (q[i].size()) ka[i] = *q[i].begin();
  }
  priority_queue<int, vector<int>, greater<int>> ms;
  for (int i = 1; i <= n; i++) {
    while (ms.size() && ms.top() < i) ms.pop();

    if (ms.size() % 2) {
      if (s1[i - 1] == '1' && s2[i - 1] == '0' && ka[i]) ms.push(ka[i]);
    } else if (s1[i - 1] == '0' && s2[i - 1] == '1' && ka[i])
      ms.push(ka[i]);

    if (ms.size() % 2) swap(s1[i - 1], s2[i - 1]);
  }
  cout << s1;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...