zoukankan      html  css  js  c++  java
  • [CF1238D] AB-string

    [CF1238D] AB-string - 结论,dp

    Description

    如果一个字符串的每个字母,属于至少一个(长度大于1)的回文串,则称这个字符串为good。问给定 01 串有多少个子串是 good。

    Solution

    bad 的子串只有下面 4 种形式

    ABBB...BB

    BAAA...AA

    AA...AAAB

    BB...BBBA

    所以我们先 dp 计算出一个位置向左、向右能延伸出多少个相同的,然后扫一遍统计即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1e6 + 5;
    
    int n;
    string str;
    int l[N], r[N], ans;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin >> n >> str;
    
        str = "0" + str + "0";
    
        char a = 'a';
        char b = 'b';
    
        for (int i = 1; i <= n; i++)
        {
            if (str[i] == str[i - 1])
                l[i] = l[i - 1] + 1;
            else
                l[i] = 1;
        }
        for (int i = n; i >= 1; i--)
        {
            if (str[i] == str[i + 1])
                r[i] = r[i + 1] + 1;
            else
                r[i] = 1;
        }
    
        for (int i = 1; i < n; i++)
        {
            if (str[i] != str[i + 1])
            {
                ans += l[i] + r[i + 1] - 1;
            }
        }
    
        cout << n * (n - 1) / 2 - ans << endl;
    }
    
  • 相关阅读:
    mysql数据库__Jdbc直接操作__PreparedStatement__新增数据库
    GeneralUtils
    java easyExcel框架
    java8 stream流操作
    Java解析json报文案列
    如何避免空指针?
    List、Map集合的遍历方式
    java---关于多态性
    Android环境的搭建
    css+div学习
  • 原文地址:https://www.cnblogs.com/mollnn/p/14476780.html
Copyright © 2011-2022 走看看