Codeforces Round #585 (Div. 2) [补题]

前言

昨天下午就看了看D题,没有写对,因为要补作业,快点下机了,这周争取把题补完。

A Yellow Cards

洛谷CF1215A

开始我还没有想到什么好办法,太丢人了。

Sooke大佬给出了一个这样的方法:

  • 对于\(Min\),我们假设先给每个人发\((k-1)\)张牌,\(a_1\)就是\((k_1-1)\)\(a_2\)就是\((k_2-1)\),使每个人达到一种“饱和状态”,剩下每一张黄牌都会使一个人下场。

  • 对于\(Max\),我们采用暴力枚举\(i\),在\(a_1\)\(i\)张,在\(a_2\)\((n-i)\)张,找最大值就好了

Code

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
inline int read() {
    int x=0,f=1; char ch=getchar();
    while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
    return x * f;
}
int n,a1,a2,k1,k2,Max,Min;
int main()
{
    a1 = read(), a2 = read(), k1 = read(), k2 = read(), n = read();
    Min = max(0, n-((k1-1)*a1+(k2-1)*a2));
    for(int i=0;i<=n;++i) {
        Max = max(Max, min(a1 ,i/k1)+min(a2, (n-i)/k2));
    }
    printf("%d %d\n",Min,Max);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/BaseAI/p/11529924.html