codeforces 666A (DP)
题目链接:http://codeforces.com/problemset/problem/666/A
思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a[i-2]~a[i]组成的字符串是否可行,显然dp[len-2][0(1)]必定不可行。
转移方程:
dp[i][0] = dp[i+3][1] || dp[i+2][0] && (tmp1 != tmp2);
dp[i][1] = dp[i+2][0] || dp[i+3][1] && (tmp1 != tmp2);
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
typedef long long ll;
char a[N];
string ans[N<<1];
string tmp1 ,tmp2;
bool dp[N][2];
int cur ,num = 1;
int main()
{
scanf("%s",a);
int len = strlen(a);
if(len <= 6)
{
printf("0\n");
return 0;
}
dp[len-1][0] = 1;
tmp1 = "";
tmp1 += a[len-2];
tmp1 += a[len-1];
ans[cur++] = tmp1;
if(len > 7)
{
dp[len-1][1] = 1;
tmp1 = "";
tmp1 += a[len-3];
tmp1 += a[len-2];
tmp1 += a[len-1];
ans[cur++] = tmp1;
}
for(int i = len - 3 ;i >= 6 ;i--)
{
tmp1 = "";
tmp1 += a[i-1];
tmp1 += a[i];
tmp2 = "";
tmp2 += a[i+1];
tmp2 += a[i+2];
dp[i][0] = dp[i+3][1] || dp[i+2][0] && (tmp1 != tmp2);
if(dp[i][0])
ans[cur++] = tmp1; if(i == 6)
continue; tmp1 = "";
tmp1 += a[i-2];
tmp1 += a[i-1];
tmp1 += a[i];
tmp2 = "";
tmp2 += a[i+1];
tmp2 += a[i+2];
tmp2 += a[i+3];
dp[i][1] = dp[i+2][0] || dp[i+3][1] && (tmp1 != tmp2);
if(dp[i][1])
ans[cur++] = tmp1;
}
sort(ans ,ans + cur);//排序
for(int i = 1 ; i < cur ; i++)
{
if(ans[i] != ans[i-1])//并去重
num++;
}
printf("%d\n",num);
cout<<ans[0]<<"\n";
for(int i = 1 ; i < cur ; i++)
{
if(ans[i] != ans[i-1])
cout<<ans[i]<<"\n";
}
return 0;
}
codeforces 666A (DP)的更多相关文章
- Codeforces 1142D(dp)
题目传送 先给出设计dp的结论: dp[i][j]:以第i个位置.以rankj的数拓展出去的方案数.意会一下,我实在想不好语言-- 其中所谓rankj=真·rank%11 找到拓展的规律,转移也就顺理 ...
- Codeforces 1131G(dp)
传送门 与Codeforces1107G一起食用 思路 想到要用dp--然后常规地设dp[i]为推倒前i个牌的最小花费 有两种情况:一是当前这个推,二是不推而被别人推.对于第一种,需要找到这个左推(因 ...
- Codeforces 1107F(dp)
怎么就没人解释一下为啥用b排序可以保证正确性呢……太菜了,理解了好久. 时间流逝价值会丢失的背包,类似题洛谷1417 本题与洛谷1417不同之处在于流逝是有截止的. 1.这个dp[j]的含义是:最后跑 ...
- Codeforces 1107G(dp)
1.答案要取连续的区间疯狂暗示线段树. 2.外层枚举r,内层枚举l显然过于暴力. 3.考虑内层的优化.dp[i]:以第i位为结尾的答案(长度大于1的).dp[i] = max(第一种情况,第二种情况) ...
- codeforces 682D(DP)
题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ...
- Codeforces 1144G(dp)
据说这题是种dp的套路?然后被我国红名神仙(南大Roundgod)贪心了,不过思路上非常相近了,故而可贪吧. 设的dp[i][0]是:如果把第i个数放在上升序列里了,那么下降序列结尾的那个最大是多少: ...
- Codeforces 1152D(dp)
要点 寻找最多边的匹配的结论:贪心地从叶子开始找,最后答案都是奇数层下边的那条边. 设\(dp[i][j]\)表示当前长度为\(i\),平衡度为\(j\),平衡度为(数量减去)数量. 增加左右括号转移 ...
- Three displays CodeForces - 987C (dp)
C. Three displays time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
随机推荐
- Android中Bitmap和Drawable
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...
- PetaPoco的几个特性
在PetaPoco中,Brad并没有定义太多Attribute来修饰Models或Fields.这些为数不多的几个Attribute如下: ColumnAttribute ExplicitColumn ...
- WebForm水印照片
水印照片需要的元素 绘制:1.画布2.画笔 样式 粗细 颜色3.画什么东西4.用什么字体画 大小5.位置 展示页面 <%@ Page Language="C#" AutoEv ...
- Masonry+拖动
最近遇到一个问题,用Masonry写的布局: 拖动其中某个view,拖动方法按传统的写成如下形式.如果view中的label更改text值,拖动之后的view就会回到最初被设定的位置. - (void ...
- java 代理模式一: 静态代理
代理模式: 代理模式的作用:为其他对象提供一种代理以控制对 特定对象 的访问. 某种情况下,一个客户不想或者直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用:通过代理对象引用. ...
- oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器
--创建索引 关键词 index create[unique] index index_name on table_name(column_name [,column_name…]) [tablesp ...
- ReentRantLock使用
synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候. 1.某个线程在等待一 ...
- CentOS 7 中设置启动模式
1.命令行模式systemctl set-default multi-user.target2.图形模式systemctl set-default graphical.target
- vue.js学习笔记之v-bind,v-on
v-bind 指令用于响应地更新 HTML 特性 形式如:v-bind:href 缩写为 :href; v-on 指令用于监听DOM事件 形式如:v-on:click 缩写为 @clic ...
- python目前最好用的IDE——pycharm
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...