• P3102 [USACO14FEB]秘密代码Secret Code


    题目描述

    Farmer John has secret message that he wants to hide from his cows; the message is a string of length at least 2 containing only the characters A..Z.

    To encrypt his message, FJ applies a sequence of "operations" to it, where an operation applied to a string S first shortens S by removing either some (but not all) of the initial characters or some (but not all) of the final characters from S, after which the original string S is attached either at the beginning or end. For example, a single operation to the string ABC could result in eight possible strings:

    AABC ABABC BCABC CABC ABCA ABCAB ABCBC ABCC Given the final encrypted string, please count the number of possible ways FJ could have produced this string using one or more repeated operations applied to some source string. Operations are treated as being distinct even if they give the same encryption of FJ's message. For example, there are four distinct separate ways to obtain AAA from AA.

    Print your answer out modulo 2014.

    农民约翰收到一条的消息,记该消息为长度至少为2,只由大写字母组成的字符串S,他通过一系列操作对S进行加密。

    他的操作为,删除S的前面或者后面的若干个字符(但不删光整个S),并将剩下的部分连接到原字符串S的前面或者后面。如对于S=‘ABC’,共有8总可能的操作结果:

    AABC

    ABABC

    BCABC

    CABC

    ABCA

    ABCAB

    ABCBC

    ABCC

    给出加密后的目标字符串,请计算共有多少种加密的方案。

    对于同字符的字符串,加密方案不止一种,比如把AA加密成AAA,共有4种加密方案。将你的答案mod 2014后输出。

    输入输出格式

    输入格式:

     

    • Line 1: A single encrypted string of length at most 100.

     

    输出格式:

     

    • Line 1: The number of ways FJ could have produced this string with one or more successive operations applied to some initial string of length at least 2, written out modulo 2014. If there are no such ways, output zero.

     

    输入输出样例

    输入样例#1:
    ABABA 
    
    输出样例#1:
    8 
    

    说明

    Here are the different ways FJ could have produced ABABA:

    1. Start with ABA -> AB+ABA 
    2. Start with ABA -> ABA+BA 
    3. Start with AB -> AB+A -> AB+ABA 
    4. Start with AB -> AB+A -> ABA+BA 
    5. Start with BA -> A+BA -> AB+ABA 
    6. Start with BA -> A+BA -> ABA+BA 
    7. Start with ABAB -> ABAB+A 
    8. Start with BABA -> A+BABA 
    

     

    数据范围很小,可以暴力预处理出字符串中每个相同的部分,然后区间动规,枚举区间断点,累加将小段拼起来的方案。

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 int read(){
     9     int x=0,f=1;char ch=getchar();
    10     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 char s[120];
    15 int len;
    16 int dp[120][120];
    17 bool f[120][120][120];
    18 void init(){
    19     int i,j,k;
    20     for(i=1;i<=len;i++)
    21      for(j=1;j<=len;j++)
    22        for(k=1;i+k-1<=len && j+k-1<=len && s[i+k-1]==s[j+k-1];k++){
    23                f[i][j][k]=1;
    24        }
    25     return;
    26 }
    27 int main(){
    28     scanf("%s",s+1);
    29     int i,j;
    30     len=strlen(s+1);
    31     init();
    32     for(i=1;i<=len;i++)
    33      for(j=i;j<=len;j++){
    34          dp[i][j]=1;
    35      }
    36     for(int step=2;step<=len;step++){
    37         for(i=1;i+step-1<=len;i++){
    38             j=i+step-1;
    39             for(int k=1;k*2<step;k++){
    40                 if(f[i][i+k][k]) dp[i][j]=(dp[i][j]+dp[i+k][j])%2014;
    41                 if(f[i][j-k+1][k]) dp[i][j]=(dp[i][j]+dp[i+k][j])%2014;    
    42                 if(f[i][j-k+1][k]) dp[i][j]=(dp[i][j]+dp[i][j-k])%2014;
    43                 if(f[j-2*k+1][j-k+1][k]) dp[i][j]=(dp[i][j]+dp[i][j-k])%2014;
    44     
    45             }
    46         }
    47     }
    48     printf("%d
    ",dp[1][len]-1);
    49     return 0;
    50 }
  • 相关阅读:
    IO模型(一)
    协程(效率最快、重点)--初识协程、gevent模块、协程爬虫、协程socket(一)
    servlet工作原理解析
    servlet:servletconfig对象和它在开发过程中的应用场景
    servlet:线程安全问题
    servlet:启动的时机
    servlet:第一个demo
    安装myeclipse的一些配置
    同时安装32和64位的jdk
    fiddler:网络限速
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5926386.html
Copyright © 2020-2023  润新知