题意:

给你1e6的字符串,保证只含'a''b''c'三种字符,且相邻两个字符一定不一样

求一个大于等于n/2的回文子序列

思路:

朴素的最长回文子序列是n方的区间dp,这题显然不行,要充分利用题中所给的条件

我们发现,在任意不相交的两个区间[l,l+1]与[r,r+1]中

有两组相邻的字母,一共四个字母,而题目保证了每组两个相邻的字母肯定不同,

所以这四个字母中最多有3种字母,又因为每组字母不相同,所以这两个区间中一定有一个相同的字母

这题就搞完了

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
//#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1 using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = ;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
//const db pi = acos(-1.0); int n;
char a[maxn];
int vis[maxn];
int main(){
scanf("%s",a+);
n=strlen(a+);
int l=,r=n;
int ans = ;
while(l<=r){
//printf("%d %d\n",l,r);
if(l==r){vis[l]=;break;}
if(l+==r){vis[l]=;break;}
if(l+==r){vis[l]=;break;}
if(a[l]==a[r]){vis[l]=vis[r]=;}
else if(a[l]==a[r-]){vis[l]=vis[r-]=;}
else if(a[l+]==a[r-]){vis[l+]=vis[r-]=;}
else if(a[l+]==a[r]){vis[l+]=vis[r]=;}
l+=;r-=;
}
for(int i = ; i <= n; i++){
if(vis[i])printf("%c",a[i]);
}
return ;
}
/*
abcba
bcb
cb
aba
ababc
baba
cbacb
*/

最新文章

  1. 查看linux [Fedora] 系统信息
  2. Spring中Bean的配置:基于XML文件的方式
  3. vs2010 release 模式加了断点,跑代码无法跟踪,解决方法
  4. visual studio 设计器上出现蓝色的点和箭头
  5. 测试一个函数的运行时间(C++)
  6. Floyd算法(弗洛伊德算法)
  7. 【转】unity3d的常用快捷键
  8. Unity随手记
  9. 在右键中添加以管理员运行CMD命令提示符 (进化版)
  10. QMQTT简单介绍(1)
  11. HashCode总结
  12. Collection集合。
  13. CountDownLatch原理及使用场景
  14. app前端代码打包步骤
  15. iOS开发简记(9):APPStore审核
  16. POJ3177 Redundant Paths【双连通分量】
  17. poj 2155 B - Matrix 二维树状数组
  18. extends和implements区别
  19. 洛谷P2015二叉苹果树
  20. Cloudera Manager大数据集群环境搭建

热门文章

  1. Serv_U FTP服务端使用教程
  2. Fabric1.4:手动启动 first-network 网络(一)
  3. Asp.Net Core 学习教程1、初始.Net Core与VS Code 第一个web程序
  4. Rust入坑指南:海纳百川
  5. STM32F429的特点
  6. java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
  7. woj - 将一个问题转换为背包问题
  8. Nginx在Centos 7中配置开机启动
  9. MVEL2.0的使用实例(一)
  10. python scoket