uva 1612——Guess
生活随笔
收集整理的這篇文章主要介紹了
uva 1612——Guess
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:有n個選手參加比賽,比賽有3個題目,每個選手每個題目都有一個評測之前的于得分,當通過題目時才可以得到相應分數,否則為0,然后按照得分排名,id小的排在前面,現在給定選手的于得分和排名,求最后一名的最大得分。
思路:貪心,要想使最后一名的成績最大,那么只要保證前面的成績最大即可。可以把小數化成整數。
code:
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <sstream> #include <string> #include <vector> #include <list> #include <queue> #include <stack> #include <map> #include <set> #include <bitset>using namespace std;typedef long long ll; typedef unsigned long long ull; typedef long double ld;const int INF=0x3fffffff; const int inf=-INF; const int N=1000000; const int M=20005; const int mod=1000000007; const double esp=1e-4; const double pi=acos(-1.0);#define cls(x,c) memset(x,c,sizeof(x)) #define cpy(x,a) memcpy(x,a,sizeof(a)) #define fr(i,s,n) for (int i=s;i<=n;i++) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define lrt rt<<1 #define rrt rt<<1|1 #define middle int m=(r+l)>>1 #define lowbit(x) (x&-x) #define pii pair<int,int> #define mk make_pair #define IN freopen("in.txt","r",stdin); #define OUT freopen("out.txt","w",stdout);double v[M][8]; int main() {int ca=1,n;while (~scanf("%d",&n)&&n){double a,b,c;fr(i,1,n){scanf("%lf %lf %lf",&a,&b,&c);a=(int)((a+esp)*100),b=(int)((b+esp)*100),c=(int)((c+esp)*100);v[i][0]=0,v[i][1]=a,v[i][2]=b,v[i][3]=c,v[i][4]=a+b;v[i][5]=a+c,v[i][6]=b+c,v[i][7]=a+b+c;sort(v[i],v[i]+8);}int la,ne,ok=1;scanf("%d",&la);double t=v[la][7];fr(i,2,n){scanf("%d",&ne);if (ne>la){for (int j=7;j>=0;j--) if (t>=v[ne][j]) {t=v[ne][j];break;}}else{int tt=0;for (int j=7;j>=0;j--) if (t>v[ne][j]) {t=v[ne][j];tt=1;break;}if (!tt) ok=0;}la=ne;}printf("Case %d: ",ca++);if (ok) printf("%.2lf\n",0.01*t);else puts("No solution");} }
總結
以上是生活随笔為你收集整理的uva 1612——Guess的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育研究基地残疾人免费吗
- 下一篇: 如何治疗输卵管伞端不通