Football 南邮NOJ网络选拔赛2082



Football

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 246            测试通过 : 59 

题目描述

现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。



输入

多样例输入。

第一行给出n(1<=n<=10)m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。

接下来n行,每行分别有两个数xy分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。

输出

对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。

样例输入

2 1
1 1
1 1
3 2
1 3
3 1
2 2
4 10
1 1
2 2
1 3
0 4

样例输出

4
6
12

#include<cstdio>
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int comp(const void *a,const void *b)
{
    return *(int*)b-*(int*)a;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)==2)
    {
        int a[12],cha,x,y,cnt=0,q=0,sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            cha=x-y;
            if(cha>0)
            {
                sum+=3;
            }
            if(cha==0)
            {
                q++;
            }
            if(cha<0)
            {
                a[cnt++]=cha;
            }
        }
        if(cnt>0)
        {
             qsort(a,cnt,sizeof(int),comp);
        }
        if(m<q)
        {
            sum+=3*m;
            sum+=q-m;
            printf("%d
",sum);
        }
        if(m==q)
        {
            sum+=m*3;
            printf("%d
",sum);
        }
        else if(m>q)
        {
            sum+=3*q;
            m=m-q;
            for(int i=0;i<cnt;i++)
            {
                if(m<-a[i])
                {
                   break;
                }
                else
                {
                   m+=a[i];
                   if(m==0)
                   {
                       sum+=1;
                       break;
                   }
                   if(m==1)
                   {
                       sum+=3;
                       break;
                   }
                   if(m>1)
                   {
                      m--;
                      sum+=3;
                      continue;
                   }
                }
            }
            printf("%d
",sum);
        }
    }
}

过得也较为轻松,主要是if条件控制~

Football

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 246            测试通过 : 59 

题目描述

现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。



输入

多样例输入。

第一行给出n(1<=n<=10)m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。

接下来n行,每行分别有两个数xy分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。

输出

对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。

样例输入

2 1
1 1
1 1
3 2
1 3
3 1
2 2
4 10
1 1
2 2
1 3
0 4

样例输出

4
6
12

题目来源

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/Tobyuyu/p/4965677.html