zoukankan      html  css  js  c++  java
  • 【dp】【codeforces】 451D Count Good Substrings

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=52105

    一个只包含a和b的字符串, 问它有几个长度为偶数和长度为奇数的“压缩回文串”

    压缩的概念是相邻的相同字符压缩成一个字符

    串经过压缩一定满足如下形式 ……ababab……

    这样只要两端的字符相同则中间一定是回文的

    因此对于一个a它作为左端点形成的回文串个数就等于它右边的a的个数

    那么长度是奇数还是偶数呢,可以这么判断:

    如果a在奇数位置上和它匹配的a也在奇数位置上,那么形成的回文串就是奇数长度的,要不就是偶数长度的

    b同理

    因此统计一个字符的右边和它相同的字符在奇数位置和偶数位置的有几个,然后通过计算就可以得到结果

    注意最后的结果大于int,使用long long

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long ll;
     5 char str[100005];
     6 int odd[2], even[2], len;
     7 ll sumodd, sumeven;
     8 
     9 int main(){
    10     while(~scanf("%s", str+1)){
    11         sumodd = 0, sumeven = 0;
    12         memset(odd, 0, sizeof(odd));
    13         memset(even, 0, sizeof(even));
    14         len = strlen(str+1);
    15         for(int i = 1; i <= len; i++){
    16             int pos = str[i]-'a';
    17             if(i%2){
    18                 odd[pos]++;
    19                 sumodd += odd[pos];
    20                 sumeven += even[pos];
    21             }
    22             else{
    23                 even[pos]++;
    24                 sumodd += even[pos];
    25                 sumeven += odd[pos];
    26             }
    27         }
    28         printf("%I64d %I64d
    ", sumeven, sumodd);
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    Python集合(set)类型的操作
    3GPP接口定义及相关协议一览
    OSS基本概念介绍
    建造者模式(Builder Pattern)
    组合模式(Composite Pattern)
    观察者模式(Observe Pattern)
    ReentrantLock
    <logger>和<root>
    logback的configuration
    logback的加载过程
  • 原文地址:https://www.cnblogs.com/miaowTracy/p/5388728.html
Copyright © 2011-2022 走看看