思路:求最大很好求,先计算比较是否能将较小的黄牌数的球队队员都罚下去,如果数量不够就需要补另外一个队
求最小需要思考一下,方法是把k-1乘相应的个数(即被罚下的临界值)如果大于,直接减即可(因为此时都差1),如果小于则直接为0即不需要有人下场
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a1,a2,k1,k2,m,n,k;
int num1=0,num=0,mul,div,mul1;
cin>>a1>>a2>>k1>>k2>>m;
n=m;
if(k1>k2)
{
div=n/k2;
if(div<=a2)
{
num=div;
}
else if(div>a2)
{
num+=a2;
n-=k2*a2;
num+=n/k1;
}
mul1=(k1-1)*a1+(k2-1)*a2;
if(mul1>m)
{
num1=0;
}
else
{
mul=k1*a1;
if(mul>m)
{
num1=0;
}
else
{
num1=m-mul1;
}
}
cout<<num1<<" "<<num<<endl;
}
else
{
div=n/k1;
if(div<=a1)
{
num=div;
}
else if(div>a1)
{
num+=a1;
n-=k1*a1;
num+=n/k2;
}
mul1=(k1-1)*a1+(k2-1)*a2;
if(mul1>m)
{
num1=0;
}
else
{
mul=k2*a2;
if(mul>m)
{
num1=0;
}
else
{
num1=m-mul1;
}
}
cout<<num1<<" "<<num<<endl;
}
return 0;
}
题意:
柏林足球杯的决赛最近举行了。裁判在整场比赛中出示了nn张黄牌。比赛开始时,一队有1名队员,二队有2名队员。
在柏林足球中,把球员罚下场的规则有点不同。如果一队球员在整场比赛中收到k1张黄牌,他就不能再参加比赛了——他被罚下了。如果第二队的球员收到K2张黄牌,他就会被罚下。球员离开比赛后,他再也不能收到任何黄牌。N张黄牌中的每一张都显示给一个玩家。即使来自一个队(甚至来自两个队)的所有球员都离开比赛,比赛仍将继续。
裁判员丢失了他关于谁领到黄牌的记录。帮助他确定可能被赶出游戏的玩家的最小和最大数量。
输入:
第一行包含一个整数a1(1≤a1≤1000)-第一队的球员数。
第二行包含一个整数a2(1≤a2≤1000)-第二队的球员数量。
第三行包含一个整数k1(1≤k1≤1000)-一队球员可以收到的黄牌的最大数量(在收到许多黄牌后,他将退出比赛)。
第四行包含一个整数k2(1≤k2≤1000)——第二组玩家可以收到的黄牌的最大数量(在收到那么多黄牌后,他离开游戏)。
第五行包含一个整数n n(1≤n≤a1 k1+a2 k2)
-比赛中出示的黄牌数目。
输出:
打印两个整数-可能被赶出游戏的最小和最大玩家数。