codeforces 667C C. Reberland Linguistics(dp)
题目链接:
1 second
256 megabytes
standard input
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}.
The only line contains a string s (5 ≤ |s| ≤ 104) consisting of lowercase English letters.
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.
abacabaca
3
aca
ba
ca
abaca
0
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)的更多相关文章
- 【16.67%】【codeforces 667C】Reberland Linguistics
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Codeforces Round #349 (Div. 1) A. Reberland Linguistics dp
题目链接: 题目 A. Reberland Linguistics time limit per test:1 second memory limit per test:256 megabytes 问 ...
- Codeforces Round #349 (Div. 2) C. Reberland Linguistics DP+set
C. Reberland Linguistics First-rate specialists graduate from Berland State Institute of Peace a ...
- Codeforces.666A.Reberland Linguistics(DP)
题目链接 \(Description\) 给定串s,其由一个基本串后加任意多个长度为2或3的后缀串构成,要求基本串长度>4且相邻后缀串不相同.在基本串任意确定的情况下,求所有可能的后缀串. \( ...
- Codeforces 667C Reberland Linguistics 记忆化搜索
链接 Codeforces 667C Reberland Linguistics 题意 给你一个字符串,除去前5个字符串后,使剩下的串有长度为2或3的词根组成,相邻的词根不能重复.找到所有的词根 思路 ...
- 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 ...
- CodeForces 666A Reberland Linguistics(DP)
A. Reberland Linguistics time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Codeforces Round #349 (Div. 1) A. Reberland Linguistics 动态规划
A. Reberland Linguistics 题目连接: http://www.codeforces.com/contest/666/problem/A Description First-rat ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
随机推荐
- cobbler api接口开发测试实例
条件1:必须搭建好cobbler服务,并且可以通过web访问:http://cobbler_ip/cobbler_web 测试可以打开.然后再用以下命令测试. #!/opt/python3/bin/p ...
- Unity 3D 之通过序列化来存档游戏数据
我们在使用u3d开发一些单机游戏的过程中,都会涉及到游戏数据的存单和加载.一般情况下,如果存储的数据不复杂,我们就可以用PlayerPrefs,但有时涉及到的数据更加复杂,使用PlayerPrefs难 ...
- 阿里云***(java应用)
阿里云***(FQ)实战 前言 因为公司涉及国外业务,依赖于google的map服务,生产环境我们使用的是亚马逊服务器,所以访问google地图没问题,但是国内的开发.测试环境,使用的是阿里云,想 ...
- VS2017不能生成Database Unit Test项目
问题描述: VS2017生成Database Unit Test项目时,报出如下错误,但该项目在VS2015中能正常生成: 主要是因为下面两个程序集找不到引用: Microsoft.Data.Tool ...
- 【mac】显示隐藏文件夹
进入访达 快捷键:command+shift+.
- OHIFViewer meteor build 问题
D:\Viewers-master\OHIFViewer>meteor build --directory d:/h2zViewerC:\Users\h2z\AppData\Local\.met ...
- PHP接收参数的几种方式
PHP5在默认的情况下接收参数是需要使用 $_GET['value']; $_POST['value']; 还可以在PHP.ini 文件中的 将register_globals = Off 改re ...
- codeforces#FF(div2) D DZY Loves Modification
首先要知道选择行列操作时顺序是无关的 用两个数组row[i],col[j]分别表示仅选择i行能得到的最大值和仅选择j列能得到的最大值 这个用优先队列维护,没选择一行(列)后将这行(列)的和减去对应的n ...
- Metasploit学习笔记之——情报搜集
1.情报搜集 1.1外围信息搜索 1.1.1通过DNS和IP地址挖掘目标网络信息 (1)whois域名注冊信息查询(BT5.kali专有):root@kali:~# whois testfire.ne ...
- mt7620 wifi driver
<*> Ralink RT2860 802.11n AP support [*] LED Support [*] WSC (WiFi Simple Config) [*] WSC 2.0( ...