Codeforces Round #273 (Div. 2)

来源:互联网 发布:西安翡翠软件培训 编辑:程序博客网 时间:2024/05/16 17:55

A - Initial Bet,就是判断五个值相加的和是否是5的倍数,其中要注意的就是,如果都是0的时候应输出-1;

B - Random Teams,题目的意思容易理解,那么如果人数最多则必有一个队的人数为n-m+1,人数最少时则是有n%m个队伍的人数为n/m+1,有m-n%m个队伍为n/m个人,从而即可得到程序

C - Table Decorations,一个关于贪心的题目,自己的理解能力比较差,是研究别人的代码之后得到答案的,首先如果我们只有两种颜色的气球,我们应尽可能的用<1a,2b>

这种方式进行,当a==b时,我们则采用<3a> <3b>这种方式进行消除,知道a b小余3时,就OK了,从而我们推广到3种颜色的气球时用同样的方法。


A:

#include<string.h>#include<stdio.h>#include<stdlib.h>#include<algorithm>using namespace std;char s[10009],ss[5];int main(){    int a,b,c,d,e;    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);    if((a+b+c+d+e)%5==0&&a+b+c+d+e!=0)        printf("%d\n",(a+b+c+d+e)/5);    else        printf("-1\n");return 0;}

B:

#include <iostream>#include <cstdio>using namespace std;int main(){    long long n,m,x,y,min,max;    scanf("%I64d %I64d",&n,&m);    x=n%m;    y=n/m;    min=(2*x*y+y*y*m-y*m)/2;    max=(n-m)*(n-m+1)/2;    printf("%I64d %I64d\n",min,max);    return 0;}

C:

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int main(){    int s[9];    for(int i=0;i<3;i++)        scanf("%d",&s[i]);    sort(s,s+3);    int k1=min(s[0],(s[2]-s[1])/2);//用<1a,2c>消耗过多的c    s[0]-=k1;    s[2]-=k1*2;    int k2=s[0];//把a消完    s[0]-=k2;    s[1]-=k2;    s[2]-=k2;    int k3=min(s[1],(s[2]-s[1]));//消耗过多的c,使用<1b,2c>组合    s[1]-=k3;    s[2]-=k3*2;    int k4=s[1]/3*2;//消耗a,b直至a和b的个数小余3    s[1]-=k4/2*3;    s[2]-=k4/2*3;    int k5;    if((s[1]==1&&s[2]>=2)||s[1]==2)//判断最后的a,b能否组成一组    {       k5=1;    }    else    {       k5=0;    }    int sum=k1+k2+k3+k4+k5;    printf("%d\n",sum);    return 0;}


0 0
原创粉丝点击