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. unittest的discover方法

    转载:https://www.cnblogs.com/imyalost/p/9048386.html discover()方法 discover(start_dir, pattern ='test * ...

  2. Python记: 列表:Python的主力

    ——————————————————————————我将青春翻涌成它...... 本节主要讨论列表不同于元组和字符串的地方__________列表是可变的,即可修改内容.另外,列表有很多特有的方法. ...

  3. mediasoup-demo安装记录

    环境CentOS 7 64位 VMWare12虚拟机(win10主机),安装好NodeJS 10.13(大于8.9就可以) 已按照GitHub说明拉下来代码,配置好Node环境,开始执行npm sta ...

  4. Django Auth组件->扩展用户

    Auth用户 1.声明用户表 djangauth/settings.py..............................AUTH_USER_MODEL = 'app01.UserInfo' ...

  5. sql server2008用ip远程连接

    sql server2008用ip远程连接 转载 weixin_34167819 发布于2017-09-14 15:23:00 阅读数 84 收藏 展开 1,2005的外围应用配置器在2008中换了地 ...

  6. SQL通过Datatable更新数据库表内容

    SQL通过Datatable更新数据库表内容   //要注意的一点是在Select语句中要选择的列中必须包含主键的列,此外不支持多表连接查询 DataTable dt = new DataTable( ...

  7. 概率dp lightoj 1342

    题意:有N根木棍,每根木棍都有一个权值 其中有若干根可识别,若干根不可识别的,抽到了可识别的棍子,就不放回,抽到了不可识别的,就要放回 ,问所有棍子都至少被抽过一次后权值和的期望 不可识别的棍子,就相 ...

  8. 《C语言程序设计》王希杰 课后答案

    仅供参考,好好学习,不要骗自己哦! 在线预览 预览链接: https://www.kdocs.cn/l/shOy4IgXl 下载: 链接1: http://t.cn/AiBK2mgJ 链接2: htt ...

  9. 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

  10. 专题一 Java基础语法

    小辨析: println 输出字符后,下一个输出的字符会换行展示 print 输出字符后,下一个输出字符不会会换展示 system.out.println()  空格 分支结构:if-else使用说明 ...