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

Input
aaabb
Output
6
Input
usaco
Output
1
Input
lol
Output
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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  4. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  5. 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 ...

  6. 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 ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  8. 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 < ...

  9. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  10. Educational Codeforces Round 60 (Rated for Div. 2) 题解

    Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...

随机推荐

  1. Java8 Time API与老Date之间的转换

    前面我已经总结了Java8 Time API常用的一些方法.封装的工具类,可是最近需要对一个比较老的项目进行重构,大致看了一下使用的Jdk还是7而且里面的时间工具类还是使用的Date和Calendar ...

  2. Codeforces 1204D2. Kirk and a Binary String (hard version) (dp思路)

    题目链接:http://codeforces.com/contest/1204/problem/D2 题目是给定一个01字符串,让你尽可能多地改变1变为0,但是要保证新的字符串,对任意的L,R使得Sl ...

  3. SpringBoot整合mybatis使用pageHelper插件进行分页操作

    SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的介绍,请查看 ...

  4. 搭建Hexo一键生成,同步部署

    全网最全小白搭建Hexo+Gitee/Coding/Github 全网最全小白搭建Hexo+Gitee/Coding/Github 本站内容已全部转移到https://www.myyuns.ltd,具 ...

  5. docker镜像 - 下载、创建镜像和导入导出镜像

    实验环境 CentOS 7.5 安装并启动docker yum install -y docker systemctl start docker 镜像 安装镜像 docker pull [OPTION ...

  6. c++ google glog模块安装和基本使用(ubuntu)环境

    1,如何安装 1 Git clone https://github.com/google/glog.git 2 cd glog 3 ./autogen.sh 4 ./configure --prefi ...

  7. 了解 go 的 Context

    go 的 Context 一直对 go 的 Context 一知半解,不了解其用途,因此在这里着重了解一下 go 语言的 Context 飞雪无情的一个博文对 go 的 Context 讲的比较易懂一 ...

  8. 二次封装 Reponse,视图家族

    复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...

  9. 架构师必备技能指南:SaaS(软件即服务)架构设计

    1.介绍 从计算机诞生开始,就伴随着计算机应用程序的演变.简短的回顾历史,我们可以清楚的看到应用程序发生的巨大变化.上世纪70年代中期,随着个人PC机的爆炸式增长以及程序员的崛起,让计算机的计算能力得 ...

  10. etc/hosts文件详解

    Linux 修改 etc/hosts文件 hosts文件 hosts —— the static table lookup for host name(主机名查询静态表). hosts文件是Linux ...