和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. Css之cursor 属性

    url        需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏 ...

  2. 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP

    题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...

  3. JAVA interrupte中断线程的真正用途

    Java线程之中,一个线程的生命周期分为:初始.就绪.运行.阻塞以及结束.当然,其中也可以有四种状态,初始.就绪.运行以及结束. 一般而言,可能有三种原因引起阻塞:等待阻塞.同步阻塞以及其他阻塞(睡眠 ...

  4. 初识NDA

    领导要签署保密协议,全是英文,叫我来翻译一下,这样便接触到了NDA,翻译过程中遇到不少问题,既然接触到了,还是多查查资料了解一下,以备以后的不时之需. NDA 全称 Non Disclosure Ag ...

  5. Codeforces - 9D - How many trees? - 简单dp - 组合数学

    https://codeforces.com/problemset/problem/9/D 一开始居然还想直接找公式的,想了想还是放弃了.原来这种结构是要动态规划. 状态是知道怎么设了,$t_{nh} ...

  6. P5162 WD与积木(多项式求逆+生成函数)

    传送门 题解 比赛的时候光顾着算某一个\(n\)的答案是多少忘了考虑不同的\(n\)之间的联系了--而且我也很想知道为什么推着推着会变成一个二项式反演-- 设\(f_n\)为\(n\)块积木时的总的层 ...

  7. IT兄弟连 JavaWeb教程 经典案例3

    案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则重定向到main.html,否则重定向到login.html. 案例实 ...

  8. Struts+Spring+Hibernate处理Lob(Blob,Clob)

    在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用Blob字段或Clob字段来存储二进制图片.流媒体或文件.现就将在实际开发中遇到 ...

  9. hdu1151 Air Raid 基础匈牙利

    #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> ...

  10. Qt样式表之一:Qt样式表和盒子模型介绍

    一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件.Qt样式表的概念.术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CS ...