【每日一题】补档 ABC308E - MEX

2023-11-05

题目内容

原题链接

给定一个长度为 n n n 的数组 a a a ,一个长度为 n n n 的只包括 M,E,X 的字符串。

统计满足 i < j < k i<j<k i<j<k,且 s[i]='M',s[j]='E',s[k]='X' 对应的 mex(a[i],a[j],a[k]) 之和。

数据范围

1 ≤ n ≤ 2 ⋅ 1 0 5 1\leq n\leq 2\cdot 10^5 1n2105
0 ≤ a i ≤ 2 0\leq a_i \leq 2 0ai2
s i ∈ { ′ M ′ , ′ E ′ , ′ X ′ } s_i\in \{'M', 'E', 'X'\} si{M,E,X}

题解

从后往前做或者从后往前均可。

以从后往前为例,

  • 遇到 M ,增加 0/1/2 的次数
  • 遇到 E ,增加对应的 00,01,02,10,11,12,20,21,22 的次数
  • 遇到 X ,统计所有可能,只需要枚举 00,01,02,10,11,12,20,21,22 的次数 ,然后计算乘上 mex 即可。

时间复杂度: O ( n ) O(n) O(n)

代码

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int h[3];
int get(int x, int y, int z) {
    memset(h, 0, sizeof h);
    h[x] += 1;
    h[y] += 1;
    h[z] += 1;
    int res = 0;
    while (res < 3 && h[res] > 0) res += 1;
    return res;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];

    string s;
    cin >> s;

    vector<ll> one(3);
    vector<ll> two(9);

    ll ans = 0;
    for (int i = n - 1; i >= 0; --i) {
        if (s[i] == 'X') {
            one[a[i]] += 1;
        } else if (s[i] == 'E') {
            for (int j = 0; j < 3; ++j)
                two[a[i] * 3 + j] += one[j];
        } else {
            for (int j = 0; j < 3; ++j)
                for (int k = 0; k < 3; ++k) {
                    ans += two[j * 3 + k] * get(a[i], j, k);
                }
        }
    }

    cout << ans << "\n";

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【每日一题】补档 ABC308E - MEX 的相关文章

  • java 解析域名_Java 解析域名获取IP数组方法

    域名 Domain Name 是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称 用于在数据传输时标识计算机的电子方位 有时也指地理位置 地理上的域名 指代有行政自主权的一个地方区域 域名是一个IP地址上有 面具 一
  • Ueditor编辑器---宽度高度自适应

    Ueditor 富文本编辑器 宽度高度自适应 1 宽度自适应 设置 initialFrameWidth null var ue UE getEditor editor initialFrameWidth null 宽度随浏览器自适应 wor
  • 浏览器运行python代码

    猜你感兴趣 使用Pyqt5玩转ChatGpt 内网文件共享服务 快速搭建私有pip镜像源 python设计模式 创建型模式 docker搭建私有git服务器 项目备份和迁移 redis持久化方案 解决方案 编译运行 比如Brython Sk

随机推荐