zoukankan      html  css  js  c++  java
  • Codeforces Round #427 (Div. 2) D dp

    D. Palindromic characteristics
    time limit per test
    3 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Palindromic characteristics of string s with length |s| is a sequence of |s| integers, where k-th number is the total number of non-empty substrings of s which are k-palindromes.

    A string is 1-palindrome if and only if it reads the same backward as forward.

    A string is k-palindrome (k > 1) if and only if:

    1. Its left half equals to its right half.
    2. Its left and right halfs are non-empty (k - 1)-palindromes.

    The left half of string t is its prefix of length ⌊|t| / 2⌋, and right half — the suffix of the same length. ⌊|t| / 2⌋ denotes the length of string t divided by 2, rounded down.

    Note that each substring is counted as many times as it appears in the string. For example, in the string "aaa" the substring "a" appears 3 times.

    Input

    The first line contains the string s (1 ≤ |s| ≤ 5000) consisting of lowercase English letters.

    Output

    Print |s| integers — palindromic characteristics of string s.

    Examples
    Input
    abba
    Output
    6 1 0 0 
    Input
    abacaba
    Output
    12 4 1 0 0 0 0 
    Note

    In the first example 1-palindromes are substring «a», «b», «b», «a», «bb», «abba», the substring «bb» is 2-palindrome. There are no 3- and 4-palindromes here.

    题意:给你一个字符串 问1~len阶的子串的个数   一个回文串可以称为一阶子串  k阶子串的左右两边为k-1阶子串

    题解:dp[i][j]表示原字符串中i~j为dp[i][j]阶

     1 #pragma comment(linker, "/STACK:102400000,102400000")
     2 #include <bits/stdc++.h>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <iostream>
     6 #include <cstdlib>
     7 #include <cstring>
     8 #include <algorithm>
     9 #include <cmath>
    10 #include <cctype>
    11 #include <map>
    12 #include <set>
    13 #include <queue>
    14 #include <bitset>
    15 #include <string>
    16 #include <complex>
    17 #define ll __int64
    18 #define mod 1000000007
    19 using namespace std;
    20 char s[5003];
    21 int re[5003];
    22 int dp[5003][5003];
    23 int main()
    24 {
    25     scanf("%s",s+1);
    26     int len=strlen(s+1);
    27     for(int i=1;i<=len;i++){
    28         dp[i][i]=1;
    29         re[1]++;
    30         if(i!=len&&s[i]==s[i+1]){
    31             dp[i][i+1]=2;
    32             re[1]++;
    33             re[2]++;
    34             }
    35     }
    36     for(int i=3;i<=len;i++)//枚举字串的长度
    37     for(int j=1;j+i-1<=len;j++){
    38         if(dp[j+1][j+i-2]&&s[j]==s[i+j-1]){
    39             dp[j][j+i-1]=dp[j][j+i/2-1]+1;
    40             for(int k=1;k<=dp[j][i+j-1];k++) re[k]++;
    41         }
    42     }
    43     for(int i=1;i<=len;i++)
    44         printf("%d ",re[i]);
    45     return 0;
    46 }
  • 相关阅读:
    Memcached通信协议
    quartz在集群环境下的最终解决方案
    在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全
    微软MVC框架实战:开源的JS库Knockout
    EL表达式
    Hadoop安装配置
    Memcached安装
    Maven对不同的测试环境用不同的参数进行打包
    项目管理案例:赢与非输之别
    十年WEB技术发展历程
  • 原文地址:https://www.cnblogs.com/hsd-/p/7270138.html
Copyright © 2011-2022 走看看