超级恶心的题,写了好久,直接倒序模拟做,但是网上有博客好像是直接正序dp做的。。

因为左端点和右端点是永远不会变的,然后情况要考虑全

/*
从后往前插
只要记录左连续,右连续,中间连续
左端点一定是L,右端点一定是R
*/
#include<bits/stdc++.h>
#include<string>
using namespace std;
#define maxn 100005
string s[maxn];
int n,len1,len2,ans,flag;
char L,R,c;
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>s[i];
int len=s[n].size();
L=s[n][],R=s[n][len-];
for(int i=;i<len;i++)
if(s[n][i]==L)len1++;
else break;
for(int i=len-;i>=;i--)
if(s[n][i]==R)len2++;
else break;
ans=;
int cnt=;
for(int i=;i<len;i++)
if(s[n][i]==s[n][i+])ans=max(ans,++cnt);
else cnt=; if(L==R && ans==len)flag=;//当前串同色 for(int i=n-;i>=;i--){
len=s[i].size();
//维护ans
int tmpl=,tmpr=,cntl=,cntr=;
for(int j=;j<len;j++)//求最长的和L同色的连续块
if(s[i][j]==L)
cntl=max(cntl,++tmpl);
else tmpl=; for(int j=;j<len;j++)//求最长的和R同色的连续块
if(s[i][j]==R)
cntr=max(cntr,++tmpr);
else tmpr=; if(flag){//如果t串同色
ans=max(ans,cntl*(len1+)+len1);
}
else {//如果t串不同色
if(cntl)
ans=max(ans,+len1);
if(cntr)
ans=max(ans,+len2);
if(L==R &&cntl &&cntr)
ans=max(ans,+len1+len2);
} if(flag){ //维护前后缀长度
tmpl=len1,tmpr=len2;
for(int j=;j<len;j++)
if(s[i][j]==L)len1+=(+tmpl);
else {flag=;break;}
for(int j=len-;j>=;j--)
if(s[i][j]==R)len2+=(+tmpr);
else {flag=;break;}
} ans=max(ans,max(len1,len2));
}
cout<<ans<<endl;
}

模拟+贪心——cf1131E的更多相关文章

  1. BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 3785  Solved: 1747[Submit][Statu ...

  2. Codeforces Round #375 (Div. 2) A B C 水 模拟 贪心

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...

  3. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

  4. bzoj 2457 [BeiJing2011]双端队列 模拟+贪心

    [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 457  Solved: 203[Submit][Status][D ...

  5. bzoj 3671: [Noi2014]随机数生成器【模拟+贪心】

    降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) #includ ...

  6. ZOJ 3829 模拟贪心

    2014牡丹江现场赛水题 给出波兰式,推断其是否合法.假设不合法有两种操作: 1:任何位置加一个数字或者操作符 2:随意两个位置的元素对调 贪心模拟就可以 先推断数字数是否大于操作符数,若不大于 an ...

  7. 洛谷 P1016 旅行家的预算 模拟+贪心

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车 ...

  8. 洛谷P5019 铺设道路 题解 模拟/贪心基础题

    题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...

  9. Codeforces Round #370 (Div. 2) A B C 水 模拟 贪心

    A. Memory and Crow time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. 802.11ac wave2的前世今生

    2015年下半年,高通.博通.RTL等芯片厂商相继发布了满足802.11ac wave2要求的芯片,WLAN及终端厂商也迅速跟进推出相应的产品和终端.802.11ac wave2在多方推动下于2015 ...

  2. IK 用java 代码实现分词

    需要导入IK 对应的jar 包 IKAnalyzer2012.jar lucene-core-4.10.jar public static void main(String[] args) throw ...

  3. Linux下修改Mysql的用户(root)的密码(转载)

    修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...

  4. 买不到的数目 /// 结论公式 oj26316

    题目大意: 给定a b(这题题意不清 其实a b互质) 设变量x y(x>=0,y>=0),求 x*a+y*b=c 找到最大的不可能达到的c 如a=4 b=7 那么c=14 有这样一个定理 ...

  5. python接口自动化(接口基础)

    一.什么是接口? 前端负责展示和收集数据 后端负责处理数据,返回对应的结果 接口是前端与后端之间的桥梁,传递数据的通道 二.

  6. _IRP struct

    Windows XP x86 +0x000 Type : Int2B +0x002 Size : Uint2B +0x004 MdlAddress : Ptr32 _MDL +0x000 Next : ...

  7. Maven IntelliJ IDEA设置

    参考:博客地址: https://blog.csdn.net/huo920/article/details/82082403 Maven常用配置 在配置之前请将JDK安装好. 1. 环境变量配置 添加 ...

  8. angularJS ng-model与wdatapicker问题记录

    代码: <input type="text" placeholder="开始日期" ng-model="data_start" onF ...

  9. python、Jupyter运行时间

    1.Python time time()方法 import time time_start=time.time() time_end=time.time() print('totally cost', ...

  10. Dos中转义符

    遇到个问题: java test R=<file> 11 22 按理说应该打印 R=<file> 11 22 但是,系统报错,写的是系统找不到指定文件. 是"< ...