A.校园活动--牛客练习赛76

链接:https://ac.nowcoder.com/acm/contest/10845/A
来源:牛客网
校园活动

题目描述
牛牛中学为了给本校的OIer放松心情,决定举报一场校园活动。
现在学校的共有 个OIer,学校想把他们分为一些小组进行一个团队游戏。学校先了解了一下每个同学对这个团队游戏的了解程度。
为了游戏的公平,学校需要使分组后的每一个小组内所有人对游戏的了解程度之和相等,
但同学们并不希望完全由学校来给他们分组,所以这 个人站为了一行,学校只能将队列中一段完整的子队列作为一个小组。
换句话说,如果你想让位置为 和 的人在一个小组里,你就必须让 和 之间的所有人在这个组里面。
当然,我们知道如果只有一个小组是无法进行游戏的。
你需要判断是否可以将他们成功分组进行游戏,如果能成功分组进行游戏就打印出最多能分为多少个小组,不能成功分组进行游戏(所有人都在同一个组里)打印“-1”。

输入描述:
共两行。
第一行一个整数 ,表示队列的长度( 2 <=n<=103 )
第二行是一个长度为 的队列,表示队列中每一个OIer对游戏的了解程度且每个人的了解程度在区间内。

输出描述:
如果能成功分组,打印出最多能分为多少个小组,不能成功分组(所有人都在同一个组里)打印“-1”。

解题思路: 因为n的取值范围不大,直接暴力O(n2)枚举,学生分组, 每个组的成员人数 r 都在max_i(学生中最大了解程度)到sum(所有学生了解程度之和,即所有人都在一个组)之间 (当时<=少些了一个等于号,导致所有学生了解程度都是0的情况直接输出了-1,提交了很多次才发现,蒟蒻)

代码如下:

#include <iostream>
using namespace std;
int a[10005];
int main()
{
	int i,n,minn=99,maxx=1,r,lift,right,s=0,pos=1,flag=0,ans=0;
	string str;
	long long int sum=0;
	cin>>n;
	cin>>str;
	for(i=1;i<=n;i++)
	{
		a[i]=str[i-1]-'0';
		sum+=a[i];
		if(a[i]<minn)
		{
			minn=a[i];
		}
	}
	r=minn;
	while(r<=sum)
	{
		s=0;
		ans=0;
		flag=0;
		lift=1;
		right=0;
		for(i=1;i<=n;i++)
		{
			s+=a[i];
			if(s==r)
			{
				s=0;
				ans++;
			}
			if(s>r)
			{
				break;
			}
		}
		if(flag==0&&(r*ans==sum))
		{
			if(ans>maxx)
			{
				maxx=ans; 
			}
		}
		r++;
	}
	if(maxx==1)
	{
		cout<<-1<<endl;
	}
	else {
		cout<<maxx<<endl;
	}
	return 0;
} 

示例1

输入

5
31113

输出

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值