这道题真的是搞心态的神仙题了,由于到最后还是晕晕乎乎+WA,所以就不多说了,直接贴代码。

题目链接:UVa 207

WA代码:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define DQ 99999
#define eps 1e-8struct Player{char name[30];  //姓名int RD[4];   //四轮成绩int RD_2;   //前两轮成绩int RD_all;   //总成绩int places;   //名次double prize;   //奖金bool is_pro;   //是否为职业运动员bool is_T;   //是否并列
}players[1000];bool cmp1(const Player& a, const Player& b) {   //cmp1和cmp2都保证满轮数,所以不用考虑轮数比较if (a.RD_2 != b.RD_2)return a.RD_2 < b.RD_2;return strcmp(a.name, b.name) < 0;
}
bool cmp2(const Player& a, const Player& b) {if (a.RD_all != b.RD_all)return a.RD_all < b.RD_all;return strcmp(a.name, b.name) < 0;
}
bool cmp3(const Player& a, const Player& b) {   //为末尾的DQ选手排序int s1 = 0, s2 = 0;for(int i=0;i<4;i++)if (a.RD[i] == DQ) {s1 = i;break;}for(int i=0;i<4;i++)if (b.RD[i] == DQ) {s2 = i;break;}if (s1 != s2)return s1 > s2;if (a.RD_all != b.RD_all)return a.RD_all < b.RD_all;return strcmp(a.name, b.name) < 0;
}
int len(int n) {int sum = 0;while (n > 0) {n /= 10;sum++;}return sum;
}int main() {int T, num;double money, prop[100];while (T--) {memset(players, 0, sizeof(players));memset(prop, 0, sizeof(prop));cin >> money;for (int i = 0; i < 70; i++)cin >> prop[i];cin >> num;getchar();for (int i = 0; i < num; i++) {fgets(players[i].name, 20, stdin);if (!strchr(players[i].name, '*'))   //strchr用以在一个串中查找给定字符的第一个匹配处,找到则返回1players[i].is_pro = true;for (int j = 0; j < 4; j++) {int flag = 0;if (!scanf("%d",&players[i].RD[j])) {players[i].RD[j] = DQ;flag = 1;}if (j < 2)players[i].RD_2 += players[i].RD[j];players[i].RD_all += players[i].RD[j];if (flag)break;}char ch[45];fgets(ch, 40, stdin);}sort(players, players + num, cmp1);int pos = 0, pos2 = 0;while (pos < min(num, 70) && players[pos].RD_2 < DQ)  //将pos移动到最后一个没有犯规的选手的后一位上pos++;while (pos < num && players[pos].RD_2 == players[pos - 1].RD_2 && players[pos].RD_2 < DQ)  //在num>70且第70位选手未犯规的情况下,将pos移动到与第70位选手并列的最后一位选手的后一位上pos++;sort(players,players+pos,cmp2);while (pos2<num && pos2 <= pos && players[pos2].RD_all < DQ)  //将pos2移动到最后一个在后两轮没有犯规的选手的后一位上或pos(晋级的最后一位选手的后一位)处pos2++;while (pos2 < num && players[pos2].RD_all == players[pos2 - 1].RD_all && players[pos2].RD_all < DQ)pos2++;if (pos2 != pos)sort(players + min(pos,pos2), players + max(pos,pos2), cmp3);int rank = 1, cur = 0, pos3, cont = 0;while (cur < min(pos,pos2)) {int sum = 0;double sum_mon = 0;for (pos3 = cur; players[pos3].RD_all == players[cur].RD_all; pos3++) {if (players[pos3].is_pro) {sum++;sum_mon += prop[cont++];}}if (sum)sum_mon /= sum;elsesum_mon /= 100;for (int i = cur; i < pos3; i++) {players[i].places = rank;if (players[i].is_pro && sum) {players[i].prize = sum_mon * money / 100.0 + eps;if (sum > 1 && cont-sum<70)players[i].is_T = true;}if (cont - sum >= 70)players[i].is_pro = false;}int numb = pos3 - cur;rank += numb;cur += numb;}cout << "Player Name          Place     RD1  RD2  RD3  RD4  TOTAL     Money Won" << endl;cout << "-----------------------------------------------------------------------" << endl;for (int i = 0; i < pos; i++) {printf("%-20s", players[i].name);  //输出name,不足二十位则在后面用空格填充int N = 10;if (players[i].RD_all < DQ) {cout << players[i].places;N -= len(players[i].places);}if (players[i].is_T) {cout << "T";N--;}for (int i = 0; i < N; i++)   //???cout << " ";N = 4;for (int j = 0; j < 4; j++) {if (players[i].RD[j] != DQ)printf("%-6d", players[i].RD[j]);else {N -= j;break;}}if (N == 4)N = 0;for (int i = 0; i < N; i++)   //???cout << "   ";if (N) {cout << "DQ" << endl;continue;}if (players[i].is_pro) {printf("%-8d", players[i].RD_all); printf("$%9.2lf", players[i].prize);}elseprintf("%d", players[i].RD_all);cout << endl;}if (T)cout << endl;}return 0;
}

例题5-10 UVa207-PGA Tour Prize Money(WA)相关推荐

  1. Uva207 PGA Tour Prize Money

    题目我就不放了,这是一道和师兄帮帮忙 同等恶心的难题... 首先udebug的数据是有问题的,不符合题目描述.当然我们可以修改写法使得udebug的数据能够过. 然后,udebug的数据不全,有几个重 ...

  2. 例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金

    这个题真是快把自己折磨疯了,在学校因为要复习,折腾了10天才AC,结果电脑出了点问题代码数据全部丢失,放假后又写了一遍,结果不断RE一天,唉! 这个题的题意就不说了,紫书上说的很详细了,关键是一点,什 ...

  3. 207:PGA Tour Prize Money

    PGA Tour Prize Money 这道题太麻烦了,先放这儿,日后再说... #include<cstdio> #include<cstring> #include< ...

  4. 例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals 1990 UVa207)

    原题链接:https://vjudge.net/problem/UVA-207 分类:耐力 备注:排序和其他细节处理 前言:这是我第二次默写刘老师的代码了,真的崩溃,错一点点细节都不行,对着uDebu ...

  5. UVA 207 PGA Tour Prize Money

    题目链接:https://vjudge.net/problem/UVA-207 题目翻译摘自<算法禁赛入门经典> 题目大意 你的任务是为PGA(美国职业高尔夫球协会)巡回赛计算奖金.巡回赛 ...

  6. UVa 207 - PGA Tour Prize Money

    时间限制:3.000秒 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&catego ...

  7. UVa 207 - PGA Tour Prize Money(模拟)

    分配PGA奖金的问题,题目不难,但是细节比较坑. 要注意数据的读入,排名带T的条件,奖金精度的控制等很多细节. #include<algorithm> #include<cstdio ...

  8. UVA - 207 PGA Tour Prize Money

    /*法一:代码借鉴修改自blog:http://blog.csdn.net/aozil_yang/article/details/50543965这个博客把思路和注意的地方说得很详细了,建议一看收获: ...

  9. PGA Tour PRize Money(Uva 207)

    //生无可恋,看的别人的代码,有时间理解,20ms <code class="hljs cpp has-numbering"><span class=" ...

最新文章

  1. html js定义json对象,javascript中的json及对象
  2. 阳台花园不只美丽-东方美琪·安琪:身心健康谋定心灵升华
  3. android http get
  4. 速看|万豪数据泄漏门再敲警钟 酒店集团7步安全建议
  5. maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)
  6. 怎么在页面关闭时执行代码
  7. sqlserver设计视图修改表时不允许保存更改的问题处理
  8. label怎么换行 vb_VB中怎么换行 | 学步园
  9. C语言:字符串转为long long --- atoll函数
  10. 骇客(Hacker)用语
  11. H2O学习笔记(一)—— H2O概述
  12. Python 数据分析之 Numpy (三)
  13. 《软件工程实践》第五次作业-WordCount进阶需求 (结对第二次)
  14. leetcode——【猫和老鼠】
  15. Dolphinscheduler 学习笔记
  16. 【IPD】IPDPLM
  17. 计算机毕业设计-基于VUE+SpringBoot+MyBatis+MySQL的学生作业管理系统
  18. 少年自学python笔记_自学python笔记(一)
  19. java aud 转mp3_‎App Store 上的“音频提取器 - mp3音频转换器,音视频转换”
  20. 大数据平台搭建 | Hive

热门文章

  1. 企业使用虚拟码号的优势!
  2. 负载均衡是什么?-高负载均衡架构
  3. 物联网安全威胁与解决方案调研
  4. maven是干嘛的?
  5. set transaction
  6. Dev C++调试程序方法超详解,系统地学一下如何用 Dev C++ 调试程序
  7. php表格设置标题,每页表格标题字PHPWord
  8. 【物体检测快速入门系列 | 01 】基于Tensorflow2.x Object Detection API构建自定义物体检测器
  9. html scr 拼接,浅谈html中scr与href是什么?scr与href有什么区别?
  10. ajax get传递数组参数吗,ajax 传递数组参数