CF #541 E. String Multiplication
题意:
给定一系列字符串,每次都是后一个字符串和前面的融合,这个融合操作就是原来的串分成独立的,然后把新串插入到这些空格中。问最后,最长的相同连续的长度。
思路:
这道题可以贪心的来,我们压缩状态,记录串中每个字母对应最长的长度。然后分类讨论处理就行了。
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert> /* ⊂_ヽ
\\ Λ_Λ 来了老弟
\('ㅅ')
> ⌒ヽ
/ へ\
/ / \\
レ ノ ヽ_つ
/ /
/ /|
( (ヽ
| |、\
| 丿 \ ⌒)
| | ) /
'ノ ) Lノ */ using namespace std;
#define lson (l , mid , rt << 1)
#define rson (mid + 1 , r , rt << 1 | 1)
#define debug(x) cerr << #x << " = " << x << "\n";
#define pb push_back
#define pq priority_queue typedef long long ll;
typedef unsigned long long ull;
//typedef __int128 bll;
typedef pair<ll ,ll > pll;
typedef pair<int ,int > pii;
typedef pair<int,pii> p3; //priority_queue<int> q;//这是一个大根堆q
//priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
#define fi first
#define se second
//#define endl '\n' #define boost ios::sync_with_stdio(false);cin.tie(0)
#define rep(a, b, c) for(int a = (b); a <= (c); ++ a)
#define max3(a,b,c) max(max(a,b), c);
#define min3(a,b,c) min(min(a,b), c); const ll oo = 1ll<<;
const ll mos = 0x7FFFFFFF; //
const ll nmos = 0x80000000; //-2147483648
const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f; //
const int mod = 1e9+;
const double esp = 1e-;
const double PI=acos(-1.0);
const double PHI=0.61803399; //黄金分割点
const double tPHI=0.38196601; template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} inline void cmax(int &x,int y){if(x<y)x=y;}
inline void cmax(ll &x,ll y){if(x<y)x=y;}
inline void cmin(int &x,int y){if(x>y)x=y;}
inline void cmin(ll &x,ll y){if(x>y)x=y;} /*-----------------------showtime----------------------*/
const ll big = 1e9+;
ll dp[],tmp[];
string str;
int main(){
int n;
scanf("%d", &n);
ll ans = ;
rep(cc, , n){ cin>>str; int len = str.length();
int flag = ;
for(int i=; i<len; i++) if(str[i] != str[]) flag = ; if(flag) {
int id = (str[] - 'a');
rep(i, , ) {
if(i == id) continue;
if(dp[i]) dp[i] = ;
} if(dp[id]){
ll t = min(big, 1ll*(dp[id] + ) * len + dp[id]);
dp[id] = max(dp[id], t);
}
dp[id] = max(1ll*len, dp[id]);
}
else {
rep(i, , ){
if(dp[i]) dp[i] = ;
tmp[i] = ;
}
ll e = ;char la = str[];
str+="A";
rep(i, , len){
if(str[i] != la){
int id = (int)(la - 'a');
tmp[id] = max(tmp[id], e);
// debug(e);
la = str[i];
e = ;
}
else e++;
}
ll c1 = ,c2 = ;
for(int i=; i<len && str[i] == str[]; i++) c1++;
for(int i=len-; i>= && str[i] == str[len-];i--) c2++; if(str[] == str[len-]) {
int id = (int)(str[] - 'a');
if(dp[id]) dp[id] = min(big, max(dp[id], 1ll + c1 + c2));
}
else {
int id = (int)(str[] - 'a');
if(dp[id]) dp[id] = min(big, max(dp[id], 1ll + c1));
id = (int) (str[len-] - 'a');
if(dp[id]) dp[id] = min(big, max(dp[id], 1ll + c2));
}
rep(i, , ) {
dp[i] = max(dp[i], tmp[i]);
}
}
} rep(i, , ) ans = max(ans, dp[i]);
printf("%lld\n", ans);
return ;
}
CF #541 E. String Multiplication的更多相关文章
- CF 1131 E. String Multiplication
		E. String Multiplication 题意 分析: 从后往前考虑字符串变成什么样子. 设$S_i = p_1 \cdot p_2 \dots p_{i}$,最后一定是$S_{n - 1} ... 
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
		Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ... 
- [LeetCode] 344 Reverse String && 541 Reverse String II
		原题地址: 344 Reverse String: https://leetcode.com/problems/reverse-string/description/ 541 Reverse Stri ... 
- leetcode 344. Reverse String 、541. Reverse String II  、796. Rotate String
		344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ... 
- leadcode 541. Reverse String II
		package leadcode; /** * 541. Reverse String II * Easy * 199 * 575 * * * Given a string and an intege ... 
- E. String Multiplication
		E. String Multiplication time limit per test 2 seconds memory limit per test 256 megabytes input sta ... 
- 【leetcode_easy】541. Reverse String II
		problem 541. Reverse String II 题意: 给定一个字符串,每隔k个字符翻转这k个字符,剩余的小于k个则全部翻转,否则还是只翻转剩余的前k个字符. solution1: cl ... 
- CF1131E String Multiplication(???)
		这题难度2200,应该值了. 题目链接:CF原网 题目大意:定义两个字符串 $s$ 和 $t$($s$ 的长度为 $m$)的乘积为 $t+s_1+t+s_2+\dots+t+s_m+t$.定义一个字符 ... 
- [LeetCode&Python] Problem 541. Reverse String II
		Given a string and an integer k, you need to reverse the first k characters for every 2k characters ... 
随机推荐
- java相关的一些资源
			http://www.cnblogs.com/best/p/5876559.html#_label1 
- 【iOS】Masonry 自动布局 MASViewConstraint.m:207 错误
			问题详情: Assertion failure 报错原因: make.right.equalTo([_imageView superview]).right.with.offset(-); make. ... 
- tomcat配置启动文件
			修改tomcat到指定文件夹 conf -> server.xml <Host name="localhost" appBase="webapps" ... 
- kafka同步异步消费和消息的偏移量(四)
			1. 消费者位置(consumer position) 因为kafka服务端不保存消息的状态,所以消费端需要自己去做很多事情.我们每次调用poll()方法他总是返回已经保存在生产者队列中还未被消费者消 ... 
- 消息中间件-activemq实战之消息持久化(六)
			对于activemq消息的持久化我们在第二节的时候就简单介绍过,今天我们详细的来分析一下activemq的持久化过程以及持久化插件.在生产环境中为确保消息的可靠性,我们肯定的面临持久化消息的问题,今天 ... 
- S3 Select for Java 使用记录
			背景 后台基本使用 Amazon 的全家桶(EC2.DynamoDB.S3.Step Fuction 等等)构建.现在需要根据访问者的 IP 确定访问者的国家或地区. 已知: 访问者 IP 一个 ip ... 
- MQ服务器端和客户端通信浅谈
			MQ服务器端和客户端通信浅谈 1. WebSphere MQ的服务端的安装和配置 (1)创建名为venus.queue.manager的默认队列管理器. 在DOS窗口命令提示符下,输入以下命令: cr ... 
- 第一次Git使用以及码云(Gitee)
			下载安装Git,官网下载地址https://git-scm.com/downloads,我用的是Win10版,下载好后一路默认安装,安装时会给你自动添加环境变量,完成后打开cmd,输入git --ve ... 
- python小白手册之字符串的私有方法和公用方法
			#字符串方法. name=input('1111') if name.isalnum(): print(是否由数字字母) isdigit isdecimal判断数字 strip去空格或者其他 name ... 
- Java后台解决跨域问题
			首先说一下什么是跨域? JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制,a.com域名下的js无法操作b.c ... 
