Thinking about it:

  题目要求最后一名(也就是第N位)的分数要尽量的大,那么就一定要求第N-1名的分数也要尽量大。假如N-1可以取400和500,那么N-1应该取500,如果取400,可能第N位就不能取450,而只能取350了,这样不满足要求。综上,可以从第1位开始,分数尽量取高一点,依次类推,一直取道最后。假设第N-1位的 id 为 a,第 N 位的 id 为 b,如果 a < b,那么第N位可以取与第N-1位相同的分数,否则只能取比第N-1位的分数小的而又尽量大的数(题目中有描述:If two players got the same total score, the one with the smaller ID number got a higher rank)。如果没有符合上述条件的数可以取,那么就是"No solution"。

  这题有一个注意点:输入的分数是浮点数,而且最多有两个小数点。为了尽可能避免浮点数带来的误差,可以将分数*100后转化为整数处理,在输出时再除以100。

Reference:

  http://acm.lilingfei.com/uva-1612-guess-%E4%B9%A0%E9%A2%988-8_104

PS:

  开始处理这题时,我自信满满,因为我认为我的思路是对的。后来证明,思路确实是对的。但问题就出在浮点数处理上,而且我一直没发现这个问题,直至我查阅了大神的代码才知道处理浮点数的技巧。所以:能把浮点数转化位整数的话,就把它转化为整数处理吧。

Code:

/**
* AC @ Sep 18th 2015
* Run Time : 0.073s
*/
#include <bits/stdc++.h> using namespace std; const int MAXN = 20000 + 50;
int ord[MAXN];
std::vector<int> score[MAXN];
// count from 1
int N; void read() {
double x, y ,z;
for (int i = 1; i <= N; ++i) {
cin >> x >> y >> z;
// the operations about precision is surprisingly vital,
// especially the round function
int a = (int)round(x * 100);
int b = (int)round(y * 100);
int c = (int)round(z * 100);
// initialize the score[i] at the same time
score[i] = {0, a, b, c, a + b, a + c, b + c, a + b + c};
sort(score[i].begin(), score[i].end());
}
for (int i = 1; i <= N; ++i) {
cin >> ord[i];
}
} int find(int id, int value, int former_id) {
for (int i = (int)score[id].size() - 1; i >= 0; -- i) {
if (value == score[id][i] && id > former_id) {
return value;
} else if (value > score[id][i]) {
return score[id][i];
}
}
return -1;
} int done() {
int guess = score[ord[1]][ score[ord[1]].size() - 1 ];
for (int i = 2; i <= N; ++i) {
guess = find(ord[i], guess, ord[i - 1]);
if (guess == -1) {
return -1;
}
}
return guess;
} int Case = 0;
void work() {
read();
int ans = done();
cout << "Case " << (++Case) << ": ";
if (ans == -1) {
cout << "No solution" << endl;
} else {
cout << fixed << setprecision(2) << (ans / 100.0) << endl;
}
} int main(int argc, char const *argv[]) {
ios::sync_with_stdio(false);
cin.tie(0);
while (cin >> N && N) {
work();
}
return 0;
}

  

  

Uva 1612 Guess的更多相关文章

  1. UVa 1612 Guess (贪心+题意)

    题意:有 n 位选手参加编程比赛.比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交的越早,预得分越大). 接下来 是系统评测.如果某道题未通过测试,则 ...

  2. 紫书 习题8-8 UVa 1612 (贪心+精度)

    这道题我很快就写出来了, 但是一直WA, 然后发现是精度, 这坑了我一个小时-- (1)贪心.每次就尽量分数高, 可以保证最后分数最高 (2)神tm精度问题.记住判断大于小于和等于的时候要用EPS(1 ...

  3. 【习题 8-8 UVA - 1612】Guess

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] double千万不要用==判断相等... 而且两个保留2位有效数字的数字x,y 判断它们相等应该这样. int temp1 = ro ...

  4. UVA - 1612 Guess (猜名次)(贪心)

    题意:有n(n<=16384)位选手参加编程比赛.比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交得越早,预得分越大).接下来是系统测试.如果某 ...

  5. 【uva 1612】Guess(算法效率,2种想法)

    题意:已知 N 位选手的3题的预期得分,得分要不全拿,要不为0.且知道最后的实际名次,而且得分相同的选手,ID小的排在前面.问这样的名次可能吗.若可能,输出最后一名的最高可能得分.(N≤16384) ...

  6. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  7. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  8. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  9. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

随机推荐

  1. node 的 异步 数据库 调用 处理

    相信很多人在使用node 的时候, 一方面会觉得他强大的异步性感到很方便. 但是有时候我们却非要程序能按我们自己的想法 去串行的执行我们的思路. 同样我在编写的过程中也遇到类似的问题,比如for 和 ...

  2. JavaScript装逼指南

    如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...

  3. OpenCV学习 5:关于平滑滤波器 cvSmooth()函数

    原创文章,欢迎转载,转载请注明出处 本节主要了解下cvSmooth函数的一些参数对结果的影响.从opencv tutorial中可以看到这样一段话: 像我这样的数学渣,还是看下图来得形象: 高斯滤波器 ...

  4. IE WebDriver 因保护模式无法启动的解决 (转载)

    现在Win7 已经应用很多了,即使是最原始的Win7 也是IE8,最新的patch后,都升到了IE11 Win7下预装高版本IE的情况下,启动IE WebDriver可能会出现: org.openqa ...

  5. 3.19 外协加工(通过BOM体现加工物料总成本,非系统标准工序外协功能)

    3.19.1   业务方案描述 对每一个外协加工产品定义对应的加工费项目,并将发外加工物料及加工费项目一起挂在加工后产品的BOM下(供应类型为装配拉式). 加工后产品的成本按外协BOM卷积,总成本包含 ...

  6. image.xx.com 通过haproxy 跳转到内部图片服务器

    <pre name="code" class="html">http://www.hyyche.com/#main C:\Users\Adminis ...

  7. linux 使用sudo开放普通用户权限

    整理一下以前写的东东,刚才又忘了- ---------------------------------------------------------------------------------- ...

  8. 1.一步一步学c#(一):.NET体系结构(知识点)

    一.C#和.NET关系     1. 首先C#语言有两个很重要的方面:第一它是为了Microsoft的.NET Framework的结合而设计的,其次它是一种为问题而设计解决问题的方法的语言,它有很多 ...

  9. mockjax MOCK.js的拦截ajax请求

    今天看了下 mock.js的拦截请求 .https://github.com/nuysoft/Mock/blob/master/src/mockjax.js //覆盖(拦截) Ajax 请求,目前内置 ...

  10. C#高效导出Excel(IList转DataTable,DataSet)

    微软的Excel操作类导出Excel会很慢,此方法简单的把表中内容以字符串的形式写入到Excel中,用到的一个技巧就是"\t". C#中的\t相当于Tab键,写入到Excel中时就 ...