B.构造字符串
http://oj.csen.org.cn/contest/6/18
题目描述
给定若干个小写英文字母,请你用这些英文字母组成 n 个字符串,字符串可以是空串。要求这 n 个字符串的最长公共前缀最长。求出这个最长的长度。
所有字母都要用完,且每个字母只能用在一个字符串里。
名词解释
前缀 是指一个字符串从第一个字符开始的连续若干个字符组成的字符串。前缀可以为空串。比如字符串 “a a b” 的前缀有四个,分别是 " “, “a”, “a a”, “a a b”
我们说一个字符串 s 是某些串的 公共前缀,当且仅当这个串是每个字符串的 前缀。
每一个 公共前缀 都是一个字符串,是字符串就有长度。当 n 个串都确定下来的时候,这 nn 个串的所有 公共前缀 也就确定下来了,而且可以证明 公共前缀 的数目是有限的,在这有限个 公共前缀 中,有一个 公共前缀 的长度是最长的,这个前缀就是 最长公共前缀。
举个例子,假设现在有三个串:
a b b c
a b b d e
a b b e
这个三个串的最长公共前缀是 “abb”,长度为 3
再举个例子,假设现在有四个串:
a b b d
b b d
a b b d
a b b
那么这四个串的最长公共前缀是” ",长度为 0
输入格式
输入共有两行
第一行是一个整数 n ,表示字符串的数量
第二行包含 26 个非负整数。从前往后依次表示你拥有字母 a 的数目,字母 b 的数目,…,字母 z 的数目。
输出格式
输出一个非负整数,表示答案
数据规模与约定
对于 30% 的数据,除了字母 a 之外其它字母的数目都为 0
对于 100% 的数据,2 ≤ n ≤ 109,每种字母的个数也不超过 109
样例输入1
2
3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
样例输出1
2
样例输入2
2
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
样例输出2
0
B题啊,你都是水~
就。。。普通的思维题,把从a到z这26个字母,每个字母平均分配给每个字符串,看看最多能分几次,然后把次数相加。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long t,n,a[30]={0},sum;
sum=0;
scanf("%lld",&n);
for(long long i=1;i<=26;i++)
{
scanf("%lld",&a[i]);
sum+=a[i]/n;
}
printf("%lld",sum);
return 0;
}