NOJ 2082 football
来源:互联网 发布:php获取本机ip 编辑:程序博客网 时间:2024/06/06 02:36
大晚上刷一题水题,话不多说见题目:
Football
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 352 测试通过 : 101
总提交 : 352 测试通过 : 101
比赛描述
现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。
输入
多样例输入。
第一行给出n(1<=n<=10)和m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。
接下来n行,每行分别有两个数x和y分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。
输出
对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。
样例输入
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
AC代码:
#include<stdio.h>#include<algorithm>using namespace std;const int maxn=10000;struct ball //该题的关键 构造进球数和输球数的差量{//使用m个球去将平局填成胜局 将败局填成平局或者胜局int x,y,x_y;} b[maxn];bool cmp(const ball a,const ball b){return a.x_y>b.x_y;}int main(){int n,m;while(scanf("%d%d",&n,&m)==2){for(int i=0; i<n; i++){scanf("%d%d",&b[i].x,&b[i].y);b[i].x_y=b[i].x-b[i].y; //生成差球数}sort(b,b+n,cmp); //贪心法应用 该题只需要将差量按从小到大排序即可 非常容易理解int res=0;for(int i=0; i<n; i++){if(b[i].x>b[i].y)continue ;while(b[i].x_y<=0&&m>0) //填局 控制差球数为一即可 在m>0的情况下{m--; //填b[i].x_y++;}}for(int i=0; i<n; i++) //遍历最终的局势 生成结果{if(b[i].x_y>0)res+=3;else if(b[i].x_y==0)res++;else if(b[i].x_y<0) //当遇到败局即可退出break;}printf("%d\n",res);}}
需要注意的是,尽量将分数和比赛结果分开计算,可以减少发生逻辑错误的可能性。
这一题其实很水,只需要构思到差球数这一概念即可,然后根据差球数进行排序。中间细节可见代码注释,不赘述。
勉强算得上使用了贪心法吧。
深夜刷题,刷了道水题…………
不管怎么样,即时是刷水题也是有收获的,有收获就值得将它记下来。
特此记下,以备后日回顾。
0 0
- NOJ 2082 football
- Football 南邮NOJ网络选拔赛2082
- NOJ J题 FootBall
- NOJ 2082
- 南邮 OJ 2082 Football
- Football
- Football
- Football
- Football
- Football
- Football
- Noj
- POJ3071 Football
- A. Football
- A. Football
- POJ3071--Football
- poj3071 Football
- poj3071 Football
- Android中ShapeDrawable资源的用法
- Android Studio 2.2 Preview - New UI Designer & Constraint Layout
- Eclipse控制台不限日志行数
- lua 闭包
- python学习
- NOJ 2082 football
- sampler 用法 OpenCL
- 【网络编程3】Java组播套接字
- Eclipse去除js(JavaScript)验证错误
- 避免Android中Context引起的内存泄露
- 统计学 分布篇 - Poisson Distribution(泊松分布)
- eclipse去掉警告波浪线
- CSS学习7(颜色和背景)
- FMDB源码分析