黄俊东的专栏

CSDN学院讲师招募Markdown编辑器 轻松写博文学院课程好不好你说了算!读文章说感想 获好礼企业高端研修班培训直通车

NOJ J题 FootBall

分类:acm

输出

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

样例输入

2111113213312241011221304

样例输出

4612

题目来源

NUPT

题目分析:

贪心。一次录入赢球数,输球数。然后先把平局补成赢局。然后根据(输球数-赢球数)对输球的比赛进行贪心。然后求结果即可。

以下代码能够AC,但我不知道是否正确理解了出题人的意思,以下代码仅供参考。

代码如下:

/* * d.cpp * * Created on: 2015年3月29日 *Author: Administrator */#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 15;struct Ball {int win;int lose;int dis;double ratio;} balls[maxn];bool cmp(Ball a, Ball b) {return a.dis < b.dis;}bool cmp1(int a,int b){return a < b;}void printBalls(int n) {int i;for (i = 0; i < n; ++i) {printf("%d %d %d\n", balls[i].win, balls[i].lose, balls[i].dis);}}int main() {int n, m;while (scanf("%d%d", &n, &m) != EOF) {int i;for (i = 0; i < n; ++i) {scanf("%d%d", &balls[i].win, &balls[i].lose);balls[i].dis = balls[i].lose – balls[i].win;}int lose_p[maxn];int lost_cnt = 0;int win_or_p[maxn];int win_or_cnt = 0;for (i = 0; i < n; ++i) {if (m > 0) {if (balls[i].dis == 0) {balls[i].win++;m–;balls[i].dis = -1;}}}for (i = 0; i < n; ++i) {if (balls[i].dis > 0) {lose_p[lost_cnt++] = balls[i].dis;} else {win_or_p[win_or_cnt++] = balls[i].dis;}}sort(lose_p, lose_p + lost_cnt, cmp1);int ans = 0;for (i = 0; i < lost_cnt; ++i) {if (m > 0) {if (m > (lose_p[i] )) {m -= (lose_p[i] + 1);lose_p[i] = -1;} else if (m == (lose_p[i])) {m -= (lose_p[i]);lose_p[i] = 0;}}}for (i = 0; i < lost_cnt; ++i) {if (lose_p[i] < 0) {ans += 3;} else if (lose_p[i] == 0) {ans += 1;}}for(i = 0 ; i < win_or_cnt ; ++i){if(win_or_p[i] < 0){ans += 3;}else if(win_or_p[i] == 0){ans += 1;}}//printf("m:%d\n", m);//printf("%d\n", ans);cout << ans << endl;}return 0;}

,一直觉得人应该去旅行,在年轻的时候,

黄俊东的专栏

相关文章:

你感兴趣的文章:

标签云: