和cf的打分有点像啊

因为一共只有三道题,所以每个人的得分最多有8种可能性。把这8种可能性都算出来,存在数组里,排好序备用
排名就是一个天然的链表,给出了扫描的顺序
扫描时,维护两个变量:前一个player的最大得分 recd 和他的ID recdID
扫描到每个player时,从大到小遍历他的8种得分,如果有等于recd的得分,且这个player的ID大于recdID,则只需更新recdID。否则遇到第一个小于recd的得分,就更新recd和recdID。
如果在遍历完8种得分后,还没有满足上面两种情况的,则说明无解

不超过1000,两位小数,可以先*100.0,最后输出/100.0就可以减少误差

tmp_i[j] = (int)(round(tmp_f[j] * 100.0)); //注意转换

位运算: if(j & (1 << k)) 取j从右向左第k+1位

for(int j = 0; j < 8; j++) { //对应3个值取不取的8种情况(111,110,101...)
P[i].score[j] = 0;
for(int k = 0; k < 3; k++)
if(j & (1 << k))
P[i].score[j] += tmp_i[k];
}
sort(P[i].score, P[i].score + 8);

#include<cstdio>
#include<algorithm>
#include<cmath>
const int maxn = ; using namespace std; struct player{
int score[];
}P[maxn]; int nn, ID[maxn];
void read(int n){
double tmp_f[];
int tmp_i[];
for(int i = ; i <= n; i++) {
scanf("%lf%lf%lf", &tmp_f[], &tmp_f[], &tmp_f[]);
for(int j = ; j < ; j++)
tmp_i[j] = (int)(round(tmp_f[j] * 100.0)); for(int j = ; j < ; j++) {
P[i].score[j] = ;
for(int k = ; k < ; k++)
if(j & ( << k))
P[i].score[j] += tmp_i[k];
}
sort(P[i].score, P[i].score + );
}
} int main() {
int kase = ;
while(scanf("%d", &nn) == && nn) {
read(nn);
for(int i = ; i <= nn; i++)
scanf("%d", &ID[i]); int MAX = P[ID[]].score[]; //贪心策略
int pre_ID = ID[], i;
for(i = ; i <= nn; i++) {
int cur_ID = ID[i];
bool flag = false;
for(int j = ; j >= ; j--) {
if(P[cur_ID].score[j] == MAX && cur_ID > pre_ID) {
flag = true;
pre_ID = cur_ID;
break;
}
if(P[cur_ID].score[j] < MAX) {
flag = true;
pre_ID = cur_ID;
MAX = P[cur_ID].score[j];
break;
}
}
if(!flag)
break;
}
printf("Case %d: ", kase++);
if(i != nn + )
printf("No solution\n");
else
printf("%.2lf\n", MAX / 100.0);
}
return ;
}

uva1612 Guess的更多相关文章

  1. UVA-1612 Guess (贪心)

    题目大意:考试共有三道题,n个人,每个人对每道题的可能得分已知,现在已知考后排名情况,问排名合不合理. 题目分析:贪心.贪心策略:每处理一个排名,都让他的得分尽量高. # include<ios ...

随机推荐

  1. 六个优雅的 Linux 命令行技巧

    一些非常有用的命令能让命令行的生活更满足,使用 Linux 命令工作可以获得许多乐趣,但是如果您使用一些命令,它们可以减少您的工作或以有趣的方式显示信息时,您将获得更多的乐趣.在今天的文章中,我们将介 ...

  2. (水题)洛谷 - P1553 - 数字反转(升级版) - 字符串格式转换

    https://www.luogu.org/problemnew/show/P1553 忘记给整数加上前导零去除的代码了.其实不去也可以,额外的进位用一个carry另外存起来就好. #include& ...

  3. hdoj1540 【线段树的表示】

    大牛blog 这题的题解写给自己看-- 总结(瞎扯一点): 之前只会思考,len,sum,然后GG,如果只是sum和len的去用的话,就是在mid的时候会GG.然后这次也是参考大牛的写法,其实还是蛮简 ...

  4. MongoDb Samus c# Find函数的使用说明

    长活短说, 网上有一些是不对的 比如 Op.GreaterThan(...).LessThan(..) 不能这么用来表示 ( , ) 而应该这么用: var doc = new Document( a ...

  5. python __builtins__ help类 (32)

    32.'help', 接收对象作为参数,更详细地返回该对象的所有属性和方法 class _Helper(builtins.object) | Define the builtin 'help'. | ...

  6. poj 2774 Long Long Message【SA】

    把两个串接到一起求一个SA,然后找最大的sa[i]和sa[i-1]不是一个串的he[i] #include<iostream> #include<cstdio> #includ ...

  7. servlet重定向到jsp后样式无法正常显示

    原因是在servlet中转发时css和图片的路径变成相对于这个servlet的相对路径而非相对于web项目的路径了. 解决办法:导入css样式和图片时把css写成动态绝对路径, 如用EL表达式表示: ...

  8. Hibernate中表与表之间的关联一对多,级联保存和级联删除

    1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...

  9. 因磁盘空间不足导致HDFS的NameNode进入安全模式问题记录

    因磁盘空间不足导致HDFS的NameNode进入安全模式问题记录,调用API上传及下载文件时报如下错误信息: org.apache.hadoop.ipc.RemoteException(org.apa ...

  10. 在Android 源码中添加系统服务

    Android系统本身提供了很多系统服务,如WindowManagerService,PowerManagerService等.下面描述一下添加一个系统服务的具体步骤. 1.定义自定义系统服务接口 撰 ...