例题5-10 UVa207-PGA Tour Prize Money(WA)
这道题真的是搞心态的神仙题了,由于到最后还是晕晕乎乎+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)相关推荐
- Uva207 PGA Tour Prize Money
题目我就不放了,这是一道和师兄帮帮忙 同等恶心的难题... 首先udebug的数据是有问题的,不符合题目描述.当然我们可以修改写法使得udebug的数据能够过. 然后,udebug的数据不全,有几个重 ...
- 例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金
这个题真是快把自己折磨疯了,在学校因为要复习,折腾了10天才AC,结果电脑出了点问题代码数据全部丢失,放假后又写了一遍,结果不断RE一天,唉! 这个题的题意就不说了,紫书上说的很详细了,关键是一点,什 ...
- 207:PGA Tour Prize Money
PGA Tour Prize Money 这道题太麻烦了,先放这儿,日后再说... #include<cstdio> #include<cstring> #include< ...
- 例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals 1990 UVa207)
原题链接:https://vjudge.net/problem/UVA-207 分类:耐力 备注:排序和其他细节处理 前言:这是我第二次默写刘老师的代码了,真的崩溃,错一点点细节都不行,对着uDebu ...
- UVA 207 PGA Tour Prize Money
题目链接:https://vjudge.net/problem/UVA-207 题目翻译摘自<算法禁赛入门经典> 题目大意 你的任务是为PGA(美国职业高尔夫球协会)巡回赛计算奖金.巡回赛 ...
- UVa 207 - PGA Tour Prize Money
时间限制:3.000秒 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&catego ...
- UVa 207 - PGA Tour Prize Money(模拟)
分配PGA奖金的问题,题目不难,但是细节比较坑. 要注意数据的读入,排名带T的条件,奖金精度的控制等很多细节. #include<algorithm> #include<cstdio ...
- UVA - 207 PGA Tour Prize Money
/*法一:代码借鉴修改自blog:http://blog.csdn.net/aozil_yang/article/details/50543965这个博客把思路和注意的地方说得很详细了,建议一看收获: ...
- PGA Tour PRize Money(Uva 207)
//生无可恋,看的别人的代码,有时间理解,20ms <code class="hljs cpp has-numbering"><span class=" ...
最新文章
- html js定义json对象,javascript中的json及对象
- 阳台花园不只美丽-东方美琪·安琪:身心健康谋定心灵升华
- android http get
- 速看|万豪数据泄漏门再敲警钟 酒店集团7步安全建议
- maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)
- 怎么在页面关闭时执行代码
- sqlserver设计视图修改表时不允许保存更改的问题处理
- label怎么换行 vb_VB中怎么换行 | 学步园
- C语言:字符串转为long long --- atoll函数
- 骇客(Hacker)用语
- H2O学习笔记(一)—— H2O概述
- Python 数据分析之 Numpy (三)
- 《软件工程实践》第五次作业-WordCount进阶需求 (结对第二次)
- leetcode——【猫和老鼠】
- Dolphinscheduler 学习笔记
- 【IPD】IPDPLM
- 计算机毕业设计-基于VUE+SpringBoot+MyBatis+MySQL的学生作业管理系统
- 少年自学python笔记_自学python笔记(一)
- java aud 转mp3_App Store 上的“音频提取器 - mp3音频转换器,音视频转换”
- 大数据平台搭建 | Hive
热门文章
- 企业使用虚拟码号的优势!
- 负载均衡是什么?-高负载均衡架构
- 物联网安全威胁与解决方案调研
- maven是干嘛的?
- set transaction
- Dev C++调试程序方法超详解,系统地学一下如何用 Dev C++ 调试程序
- php表格设置标题,每页表格标题字PHPWord
- 【物体检测快速入门系列 | 01 】基于Tensorflow2.x Object Detection API构建自定义物体检测器
- html scr 拼接,浅谈html中scr与href是什么?scr与href有什么区别?
- ajax get传递数组参数吗,ajax 传递数组参数