题目链接:

C. Reberland Linguistics

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

First-rate specialists graduate from Berland State Institute of Peace and Friendship. You are one of the most talented students in this university. The education is not easy because you need to have fundamental knowledge in different areas, which sometimes are not related to each other.

For example, you should know linguistics very well. You learn a structure of Reberland language as foreign language. In this language words are constructed according to the following rules. First you need to choose the "root" of the word — some string which has more than 4 letters. Then several strings with the length 2 or 3 symbols are appended to this word. The only restriction — it is not allowed to append the same string twice in a row. All these strings are considered to be suffixes of the word (this time we use word "suffix" to describe a morpheme but not the few last characters of the string as you may used to).

Here is one exercise that you have found in your task list. You are given the word s. Find all distinct strings with the length 2 or 3, which can be suffixes of this word according to the word constructing rules in Reberland language.

Two strings are considered distinct if they have different length or there is a position in which corresponding characters do not match.

Let's look at the example: the word abacabaca is given. This word can be obtained in the following ways: , where the root of the word is overlined, and suffixes are marked by "corners". Thus, the set of possible suffixes for this word is {aca, ba, ca}.

Input
 

The only line contains a string s (5 ≤ |s| ≤ 104) consisting of lowercase English letters.

Output
 

On the first line print integer k — a number of distinct possible suffixes. On the next k lines print suffixes.

Print suffixes in lexicographical (alphabetical) order.

Examples
 
input
abacabaca
output
3
aca
ba
ca
input
abaca
output
0
Note

The first test was analysed in the problem statement.

In the second example the length of the string equals 5. The length of the root equals 5, so no string can be used as a suffix.

题意

给一个字符串,去掉一个长度至少为5的前缀,剩下的切成长度为2或者3的串,且相邻的串不相同,问,最后可以切成多少个串且分别是什么;

思路

dp[i][2]==1表示i,i+1形成的串可以满足要求,dp[i][3]==1同理;再就是转移了;

考虑i位置,长度为2;

(1)如果<i,i+1>与<i+2,i+3>相同,那么只有dp[i+2][3]==1时dp[i][2]=1;

如果<i,i+1>与<i+2,i+3>不同,那么只要dp[i+2][2]==1或者dp[i+2][3]==1时dp[i][2]=1;

(2)如果<i,i+1,i+2>与<i+3,i+4,i+5>相同,只有dp[i+3][2]==1时dp[i][3]=1;

如果不同,那么只要dp[i+3][2]==1或者dp[i+3][3]==1时dp[i][3]=1;

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e4+;
const LL mod=1e9+;
const double PI=acos(-1.0);
char str[N];
int dp[N][];
map<string,int>mp;
vector<string>ve;
int main()
{
scanf("%s",str);
int n=strlen(str);
string x,y="";
int ans=;
for(int i=n-;i>;i--)
{
if(n-i==)
{
x=y+str[i]+str[i+];
mp[x]=;
ve.push_back(x);
dp[i][]=;
}
else if(n-i==)
{
x=y+str[i]+str[i+]+str[i+];
mp[x]=;
ve.push_back(x);
dp[i][]=;
}
else if(n-i==)
{
if(str[i]!=str[i+]||str[i+]!=str[i+])
{
x=y+str[i]+str[i+];
if(!mp[x])
{
mp[x]=;
ve.push_back(x);
}
dp[i][]=;
}
else
{
x=y+str[i]+str[i+];
dp[i][]=;
}
}
else
{ if(str[i]==str[i+]&&str[i+]==str[i+])
{
if(dp[i+][]){
dp[i][]=;
x=y+str[i]+str[i+];
if(!mp[x])
{
mp[x]=;
ve.push_back(x);
}
}
}
else
{
if(dp[i+][]||dp[i+][])
{
dp[i][]=;
x=y+str[i]+str[i+];
if(!mp[x])
{
mp[x]=;
ve.push_back(x);
}
}
}
if(str[i]==str[i+]&&str[i+]==str[i+]&&str[i+]==str[i+])
{
if(dp[i+][])
{
dp[i][]=;
x=y+str[i]+str[i+]+str[i+];
if(!mp[x])
{
mp[x]=;
ve.push_back(x);
}
}
}
else
{
if(dp[i+][]||dp[i+][])
{
dp[i][]=;
x=y+str[i]+str[i+]+str[i+];
if(!mp[x])
{
mp[x]=;
ve.push_back(x);
}
}
}
}
}
ans=ve.size();
sort(ve.begin(),ve.end());
printf("%d\n",ans);
for(int i=;i<ans;i++)
{
cout<<ve[i]<<"\n";
} }

codeforces 667C C. Reberland Linguistics(dp)的更多相关文章

  1. 【16.67%】【codeforces 667C】Reberland Linguistics

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. Codeforces Round #349 (Div. 1) A. Reberland Linguistics dp

    题目链接: 题目 A. Reberland Linguistics time limit per test:1 second memory limit per test:256 megabytes 问 ...

  3. Codeforces Round #349 (Div. 2) C. Reberland Linguistics DP+set

    C. Reberland Linguistics     First-rate specialists graduate from Berland State Institute of Peace a ...

  4. Codeforces.666A.Reberland Linguistics(DP)

    题目链接 \(Description\) 给定串s,其由一个基本串后加任意多个长度为2或3的后缀串构成,要求基本串长度>4且相邻后缀串不相同.在基本串任意确定的情况下,求所有可能的后缀串. \( ...

  5. Codeforces 667C Reberland Linguistics 记忆化搜索

    链接 Codeforces 667C Reberland Linguistics 题意 给你一个字符串,除去前5个字符串后,使剩下的串有长度为2或3的词根组成,相邻的词根不能重复.找到所有的词根 思路 ...

  6. Codeforces Round #349 (Div. 2) C. Reberland Linguistics (DP)

    C. Reberland Linguistics time limit per test 1 second memory limit per test 256 megabytes input stan ...

  7. CodeForces 666A Reberland Linguistics(DP)

    A. Reberland Linguistics time limit per test 1 second memory limit per test 256 megabytes input stan ...

  8. Codeforces Round #349 (Div. 1) A. Reberland Linguistics 动态规划

    A. Reberland Linguistics 题目连接: http://www.codeforces.com/contest/666/problem/A Description First-rat ...

  9. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

随机推荐

  1. CSV文件导出2

    public void exportCSVFile( HttpServletResponse response, ResultSet rs,String fileName,String headers ...

  2. JVM GC 相关

    http://blog.csdn.net/cutesource/article/details/5904501 http://www.cnblogs.com/dingyingsi/p/3760447. ...

  3. Spring Task Schedule 及多线程

    http://spring.io/blog/2010/01/05/task-scheduling-simplifications-in-spring-3-0/‘ http://ekramalikazi ...

  4. Debian9初始配置

    1 进入root用户 su root 2 修改镜像源:编辑/etc/apt/sources.list文件 nano /etc/apt/sources.list 修改内容如下: deb http://m ...

  5. HDU 5893 List wants to travel(树链剖分+线段树)

    题目链接 HDU5893 $2016$年$ICPC$沈阳网络赛的$B$题.这道题其和 BZOJ2243 基本一样 那道题我也写了题解 点这里 两道题的区别就是$BZOJ$这题是点的权值,这道题是边权. ...

  6. P1717 钓鱼 洛谷

    https://www.luogu.org/problem/show?pid=1717 题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋们藐杀之后非常不爽,为了表示安慰和鼓励,VIP999决定请 ...

  7. python多线程(四)

    原文:http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html 本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础 ...

  8. POJ 题目3450 Corporate Identity(KMP 暴力)

    Corporate Identity Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5493   Accepted: 201 ...

  9. BUPT复试专题—排序(2009)

    题目描述 查找序列a 中小于 b 的第 i 个数的数的个数 输入 输入有多组,每组四行第一行:序列a个数N第二行:(序列a的)N个数,升序排列第三行:序列b个数M 第四行:(序列b的)M个数,升序排列 ...

  10. [CSS3] Identify Interactive HTML Elements with CSS Link Pseudo Classes

    The interactive pseudo-classes for links (and buttons) allow us to make sure the user knows what ele ...