UVA 1612 Guess
来源:互联网 发布:varier 适合程序员吗 编辑:程序博客网 时间:2024/05/14 18:52
题意:给你n个选手的3个预期分数a,b,c . 如果他们其中错一题就只能得0分,否则得预期分,再给你一个序列. 规则:分数低的排后面,分数高的排前面,分数相同的id小的排前面.那么问题是找到符合这个序列的最后一名的最高分数
个人感想:按题意来做,比较简单.
分析:
就是一个贪心,分两种情况.
当前id比前一个大的:-》这样就没有分数相同的限制,直接尝试着从分数减去wa的分数,小于等于前一个就好了.尽可能接近前面一个的分数。
当前id比前一个小的:-》这种情况就要分数必须严格小于前一个的分数了,那么我们再找接近前一个分数的最大值就好了。
/* Author:GavinjouElephant * Title: * Number: * main meanning: * * * *///#define OUT#include <iostream>using namespace std;#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <sstream>#include <cctype>#include <vector>#include <set>#include <cstdlib>#include <map>#include <queue>//#include<initializer_list>//#include <windows.h>//#include <fstream>//#include <conio.h>#define MaxN 0x7fffffff#define MinN -0x7fffffff#define Clear(x) memset(x,0,sizeof(x))const int INF=0x3f3f3f3f;const int maxn=20000;const double eps=1e-6;int N;double Rank[maxn][3];int S[maxn];double last;double goal[8];double getsum(int id){ return Rank[id][0]+Rank[id][1]+Rank[id][2];}bool Check(double last,double now,int select){ if(select) { if(last>now||fabs(last-now)<eps)return true; } else { if(last>now)return true; } return false;}void getgoal(int id){ goal[0]=0; goal[1]=Rank[id][0]; goal[2]=Rank[id][1]; goal[3]=Rank[id][2]; goal[4]=Rank[id][0]+Rank[id][1]; goal[5]=Rank[id][0]+Rank[id][2]; goal[6]=Rank[id][1]+Rank[id][2]; goal[7]=Rank[id][0]+Rank[id][1]+Rank[id][2]; sort(goal,goal+8);}bool solve(){ last=getsum(S[1]); for(int i=2;i<=N;i++) { if(S[i]>S[i-1]) { double now=getsum(S[i]); getgoal(S[i]); bool flag=true; for(int j=0;j<8;j++) { if(Check(last,now-goal[j],1)) { last=now-goal[j]; flag=false; break; } } if(flag) return false; } else { double now=getsum(S[i]); getgoal(S[i]); bool flag=true; for(int j=0;j<8;j++) { if(Check(last,now-goal[j],0)) { last=now-goal[j]; flag=false; break; } } if(flag) return false; } } return true;}int main(){#ifdef OUT freopen("coco.txt","r",stdin); freopen("lala.txt","w",stdout);#endif int cas=0; while(scanf("%d",&N),N) { cas++; for(int i=1;i<=N;i++) { for(int j=0;j<3;j++) { cin>>Rank[i][j]; } sort(Rank[i],Rank[i]+3); } for(int i=1;i<=N;i++) { scanf("%d",&S[i]); } if(solve())printf("Case %d: %0.2f\n",cas,last); else printf("Case %d: No solution\n",cas); } return 0;}
0 0
- uva uva 1612 - Guess
- UVA - 1612 Guess 贪心
- Uva - 1612 - Guess
- UVA 1612 Guess
- UVA 1612 Guess
- UVA 1612(p254)----Guess
- UVA 1612 Guess
- UVa 1612:Guess(贪心)
- uva 1612——Guess
- Guess UVA
- UVa #1612 Guess (习题8-8)
- uva 1423 Guess
- UVA 1423 - Guess
- UVa OJ 1423 Guess
- UVa 1423 Guess (拓扑排序)
- UVA 1423 - Guess(拓扑排序)
- UVA 1423Guess 【拓扑排序】
- UVA 1423 Guess 拓扑排序
- A+B for Input-Output Practice (VIII)
- 优化mysql slave的同步速度
- 读懂diff的3种格式+git格式的diff
- python风格规范
- Cent OS安装Chrome
- UVA 1612 Guess
- 怎么样导入RobotFramework 自定义关键字(库文件)
- ContentUris类常用方法介绍
- APP开发流程实例讲解-儒释道网络电台八天开发全程-签名发布
- (OK)(OK) seem_testing_result_5-android-x86-64_4_vbox.png
- Maven + Eclipse : 取消 updating maven dependencies
- CodeForces 682A
- ubuntu下安装rubymine成功
- NYOJ_1022 合纵连横 并查集的删除