Codeforces1221 C. Perfect Team(公式推导)

在这里插入图片描述

在这里插入图片描述

题意:

3 种人各c,m,x 个, 要求3人一队, c至少一个,m至少一个,x可有可无。问:最多能组成多少队。

公式推导 :

组合完美队伍
	标准:c至少一个,m至少一个,x可有可无; 
	思路:首先我们最多只能是是min(c,m);
		 if(x>=min(c,m)) a=min(c,m);直接输出a 
		 else{
		 	先构成x个完美队伍。
			则  数学家 :c-x   程序员:m-x
			假设在这些人中 可以构成 T个完美队伍而一个队伍至少三个人
			得:  c-x>=T,m-x>=T,c-x+m-x>=3T;
			然后我们先给这T个队伍每个队伍分配一个人;
			得:c-x+m-x-T>=2T ==>c+m-2x>=3T
			
			{   c-x>=T
				m-x>=T      =>T=min(c-x,m-x,(c+m-2x)/3)
				c+m-2x>=3T
			}
			因为原本有x个队伍 =>T=min(c,m,(c+m+x)/3) 
		}
	推广: a,b,c至少有一个,x可有可无;
	思路: 首先我们最多只能是是min(a,b,c);
		if(x>=min(a,b,c))   直接输出min(a,b,c); 
		else{
			先构成x个完美队伍。
			则  数学家 :a-x   程序员:b-x  小姐姐;c-x;
			假设在这些人中 可以构成 T个完美队伍
			得:  a-x+b-x+c-x>=4T;
			然后我们先给这T个队伍每个队伍分配一个人;
			a-x+b-x+c-x-T>=3T; ==>a+b+c-3x>=4T 
			{
				a-x>=T
				b-x>=T         =>T=min(a-x,b-x,c-x,(c+m-3x)/4)
				c-x>=T
				c+m-3x>=4T
			}
			因为原本有x个队伍 =>T=min(a,b,c,(a+b+c+x)/4);
		}
	同理 a,b,c......n-1至少一样,n可有可无  =>T=min(a,b,c,,,,n-1,min(a+b+c+....+n)/n)

代码:

#include <iostream>
#include <algorithm>
using namespace std;
int q,c,m,x;
int main()
{
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		scanf("%d%d%d",&c,&m,&x);
		printf("%d\n",min(min(c,m),(c+m+x)/3)); 
	} 
	return 0;
} 

完美撒花!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@李思成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值