智算之道初赛第二场 第二题 构造字符串

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43813647/article/details/107453542