1 条题解

  • 0
    @ 2023-12-25 20:53:06

    #include<cstdio>

    #include<iostream>

    #define ll long long

    usingnamespacestd;

    intn, a[500005], nxt[500005][2];

    intlst[2];

    charc;

    ll ans;

    ll clac(intL, intR) {

    if(R - L + 1 < 3) return0;

    return1ll * (R - L + 1 - 3 + 1) * (R - L + 1 - 3 + 1 + 1) / 2;

    }

    intmain() {

    scanf("%d", &n);

    for(inti = 1; i <= n; i++) {

    c = getchar(); while(c != 'G'&& c != 'H') c = getchar();

    if(c == 'G') a[i] = 1;

    }

    lst[0] = lst[1] = n + 1; nxt[n + 1][0] = nxt[n + 1][1] = n + 1;

    for(inti = n; i >= 1; i--) {

    nxt[i][0] = lst[0]; nxt[i][1] = lst[1];

    lst[a[i]] = i;

    }

    ans = clac(1, n);

    for(inti = 1; i <= n; i++) {

    intL;

    if(a[i]) {

    L = max(nxt[i][1], nxt[nxt[i][0]][0]);

    }

    else{

    L = max(nxt[i][0], nxt[nxt[i][1]][1]);

    }

    if(L - i + 1 < 3) L = i + 2 - 1;

    ans -= max(0, n - L + 1);

    intR = nxt[i][a[i] ^ 1] - 1;

    if(R - i + 1 >= 3) ans -= R - i + 1 - 3 + 1;

    }

    printf("%lld", ans);

    return0;

    }

    • 1

    信息

    ID
    7133
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    4
    已通过
    2
    上传者