题目描述
有一所大学每年都会举办一场信息学竞赛,竞赛中,每支队伍由 11 名男生和 22 名女生组成。一所学院的院长为了减少对手,把其他对手安排在一个遥远的国家进行实习,被派去实习的对手将无法参加比赛。所有选手中,女性选手的数量为 �m,男性选手的数量为 �n,可以派去实习的对手数量为 �k。院长必须创建能参加比赛的队伍。你的任务是输出可以创建的最大团队数。
输入格式
输入数据共一行。
一行三个整数,�,�,�m,n,k,含义如题所示。
输出格式
输出数据共一行。
一行一个整数,���ans,表示可以组成的最大团队数。
输入输出样例
输入 #1复制
6 3 2
输出 #1复制
2
输入 #2复制
2 1 1
输出 #2复制
0
输入 #3复制
6 10 3
输出 #3复制
3
说明/提示
样例输入输出 1 解释
院长就可以派一男一女去实习,这样就变成了:�=5m=5,�=2n=2,分成两队(一个女生没有队伍),所以答案为 22。
数据规模与约定
对于 100%100% 的数据,0≤�,�≤1000≤n,m≤100,0≤�≤�+�0≤k≤m+n。
说明
题目译自 COCI2010-2011 CONTEST #1 T1 TIMSKO。
因为�k的取值范围不大,所以这道题目可以用暴力循环来做。
我们就可以枚举让女生去实习的人数,先假设去实习的是�i人,男生去实习的是�−�k−i人,我们假设�=�−�j=k−i, 男生实习人数就是�j。
最后拿���ans记录答案,拿这种方案和���ans比较,这次的队伍就是�/2i/2和�j中的小的,i/2向下取整。
最后在说一下,这里不用判断方案是否可行,因为方案如果不可行,男生或者女生是负数,负数一定比答案小,所以不用判断了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k,i,t;
cin>>m>>n>>k;
t=(m+n-k)/3;
for(i=0;i<=t;i++){
m-=2;
n--;
if(m<0||n<0||m+n-k<0) break;
}
cout<<i;
return 0;
}
拜拜!