Codeforces Round #621 (Div. 1 + Div. 2) C. Cow and Message
Bessie the cow has just intercepted a text that Farmer John sent to Burger Queen! However, Bessie is sure that there is a secret message hidden inside.
The text is a string ss of lowercase Latin letters. She considers a string tt as hidden in string ss if tt exists as a subsequence of ss whose indices form an arithmetic progression. For example, the string aab is hidden in string aaabb because it occurs at indices 11 , 33 , and 55 , which form an arithmetic progression with a common difference of 22 . Bessie thinks that any hidden string that occurs the most times is the secret message. Two occurrences of a subsequence of SS are distinct if the sets of indices are different. Help her find the number of occurrences of the secret message!
For example, in the string aaabb, a is hidden 33 times, b is hidden 22 times, ab is hidden 66 times, aa is hidden 33 times, bb is hidden 11 time, aab is hidden 22 times, aaa is hidden 11 time, abb is hidden 11 time, aaab is hidden 11 time, aabb is hidden 11 time, and aaabb is hidden 11 time. The number of occurrences of the secret message is 66 .
Input
The first line contains a string ss of lowercase Latin letters (1≤|s|≤1051≤|s|≤105 ) — the text that Bessie intercepted.
Output
Output a single integer — the number of occurrences of the secret message.
Examples
aaabb
6
usaco
1
lol
2
Note
In the first example, these are all the hidden strings and their indice sets:
- a occurs at (1)(1) , (2)(2) , (3)(3)
- b occurs at (4)(4) , (5)(5)
- ab occurs at (1,4)(1,4) , (1,5)(1,5) , (2,4)(2,4) , (2,5)(2,5) , (3,4)(3,4) , (3,5)(3,5)
- aa occurs at (1,2)(1,2) , (1,3)(1,3) , (2,3)(2,3)
- bb occurs at (4,5)(4,5)
- aab occurs at (1,3,5)(1,3,5) , (2,3,4)(2,3,4)
- aaa occurs at (1,2,3)(1,2,3)
- abb occurs at (3,4,5)(3,4,5)
- aaab occurs at (1,2,3,4)(1,2,3,4)
- aabb occurs at (2,3,4,5)(2,3,4,5)
- aaabb occurs at (1,2,3,4,5)(1,2,3,4,5)
Note that all the sets of indices are arithmetic progressions.
In the second example, no hidden string occurs more than once.
In the third example, the hidden string is the letter l.
大意是给定一个字符串,让你找出所有下标成等差数列的子串里出现次数最多的出现了多少次。
看了别人的博客才勉强搞懂-_- 首先要说的就是一个字母也算是n=1的等差数列。然后我们可以发现,n=1,2,3...当n>=3以后,形成等差数列的条件越强,一个n=3的等差数列可以拆分成三个n等于2的等差数列,因此我们可以直接忽略掉n>=3时的情况。n=1时,直接开一个数组single[26]统计每个字母出现的次数。n=2时会麻烦一点,这里使用一个二维数组cnt[26][26]统计,其含义为:cnt[i][j]代表字母对('a'+i, 'a'+j)出现的次数,一定注意顺序!然后扫一遍字符串,第一维获取当前字母,然后再写一个0~26的二重循环,更新a~z与当前字母组成的字母对的个数,注意当前字母是第二个。更新的核心操作是cnt[j][s[i]-'a']+=single[j] (i是第一维循环变量,j是第二维循环变量),直接加上j对应的字母之前出现的次数即可。
别忘开long long!!
#include <bits/stdc++.h>
using namespace std;
string s;
long long cnt[][]={};
int single[]={};
long long mmax(long long a, long long b)
{
return a>b?a:b;
}
int main()
{
cin>>s;
int i,j;
if(s.size()==)
{
cout<<;
return ;
}
long long ans=;
for(i=;i<s.size();i++)
{
for(j=;j<;j++)
{
cnt[j][s[i]-'a']+=single[j];
ans=mmax(ans,cnt[j][s[i]-'a']);
}
single[s[i]-'a']++;//更新n=1情况时一定要放在后面,要不然的话会被第二重循环统计到当前的字母
ans=mmax(ans,single[s[i]-'a']);
}
cout<<ans;
return ;
}
Codeforces Round #621 (Div. 1 + Div. 2) C. Cow and Message的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 39 (Rated for Div. 2) G
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
随机推荐
- php对字符串的操作2之 处理字符串的内置函数
1,获取字串:substr($str,$start,$length) mb_substr($str,$start,$length,'utf-8'); 更换为utf8编码,能准确的截取中文 <?p ...
- Mybatis plus中一个框多条件查询 SQL拼接
遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...
- Docker - Dockerfile - 常见命令简介
概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...
- 清除定时器 和 vue 中遇到的定时器setTimeout & setInterval问题
2019-03更新 找到了更简单的方法,以setinterval为例,各位自行参考 mounted() { const that = this const timer = setInterval(fu ...
- 使用ltp4j碰到Can't find dependent libraries报错信息的问题解决
项目中使用了哈工大的自然语言处理模块ltp4j,使用idea工具集成到项目中之后,在本机运行没有问题,一切正常.打成war包,部署到服务器上,使用的时候报错Can't find dependent l ...
- 01-书城http状态405-此url不支持http方法get
错误: http状态405-此url不支持http方法get 原因:
- 全局下的isFinite
isFinite() 函数用于检查其参数是否是无穷大 1. 他是一个全局对象,可以在js代码中直接使用 2. isFinite() 函数用于检查其参数是否是无穷大. 3. 如果 number 是有限 ...
- AT24C02芯片学习记录
1.首先看AT24C02芯片的引脚说明 2.芯片的型号与存储容量(bit)的对应关系: 3.总线时序 我对时序的理解: 时钟线分两种:一种是外部时钟源控制时钟线低电平持续多久高电平持续多久,就像串口: ...
- JAVA基础学习(1)之计算
1.0计算机与编程语言 1.0.1计算机与编程语言 计算机解决问题 人:What to do 计算机:How to do 编程语言 描述要求计算机如何做事情的过程或方法 算法 计算=算法—>编程 ...
- PTA的Python练习题(十六)
第4章-15 换硬币 挺难的,这里学到一个range的用法: 也就是说range函数能实现顺序和倒序,取决于step是正是负 count = 0 x = int(input()) a = x // 5 ...