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 s of lowercase Latin letters. She considers a string t as hidden in string s if t exists as a subsequence of s whose indices form an arithmetic progression. For example, the string aab is hidden in string aaabb because it occurs at indices 1, 3, and 5, which form an arithmetic progression with a common difference of 2. Bessie thinks that any hidden string that occurs the most times is the secret message. Two occurrences of a subsequence of S 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 3 times, b is hidden 2 times, ab is hidden 6 times, aa is hidden 3 times, bb is hidden 1 time, aab is hidden 2 times, aaa is hidden 1 time, abb is hidden 1 time, aaab is hidden 1 time, aabb is hidden 1 time, and aaabb is hidden 1 time. The number of occurrences of the secret message is 6.

Input
The first line contains a string s of lowercase Latin letters (1≤|s|≤105) — the text that Bessie intercepted.

Output
Output a single integer — the number of occurrences of the secret message.

Examples
inputCopy

aaabb
outputCopy
6
inputCopy
usaco
outputCopy
1
inputCopy
lol
outputCopy
2
Note
In the first example, these are all the hidden strings and their indice sets:

a occurs at (1), (2), (3)
b occurs at (4), (5)
ab occurs at (1,4), (1,5), (2,4), (2,5), (3,4), (3,5)
aa occurs at (1,2), (1,3), (2,3)
bb occurs at (4,5)
aab occurs at (1,3,5), (2,3,4)
aaa occurs at (1,2,3)
abb occurs at (3,4,5)
aaab occurs at (1,2,3,4)
aabb occurs at (2,3,4,5)
aaabb occurs at (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.

题意:
给定一个字符串,询问下标以等差数列出现的子序列出现的最大次数
解析:
**套路题。**子序列长度为1或者为2的时候出现的次数最多。
因为能够构成长度大于2的子序列,一定能先构成长度为2的子序列,会增加许多限制。
所以只要统计长度为1和长度为2的子序列有多少个(长度为1和2的,一定可以构成等差序列)


#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100000;
typedef long long ll;
ll res[N],cnt[N][26];
char s[N];
ll ans=0;
int main()
{
	cin>>s;
	int n=strlen(s);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<26;j++)
		{
			cnt[s[i]-'a'][j]+=res[j];//记录长度为2的
			ans=max(ans,cnt[s[i]-'a'][j]);
		}
		res[s[i]-'a']++; //记录长度为1的
		ans=max(ans,res[s[i]-'a']);
	}
	cout<<ans<<endl;
}

发布了491 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43690454/article/details/104663636