#include<bits/stdc++.h>
#define debu
using namespace std;
const int maxn=1e6;
struct point
{
double v[3];
} a[maxn];
int n,cas=0;
int rk[maxn];
double ans[maxn];
vector<double> g[maxn];
void solve(int s,int k)
{
double tmp=0;
for(int i=0; i<3; i++)
if(s&(1<<i)) tmp+=a[k].v[i];
g[k].push_back(tmp);
}
void make()
{
for(int i=0; i<n; i++) g[i].clear();
for(int k=0; k<n; k++)
{
for(int i=0; i<(1<<3); i++)
solve(i,k);
sort(g[k].begin(),g[k].end());
}
}
void solve()
{
for(int i=0;i<n;i++) ans[i]=-1.0;
double lastnum;
int lastid;
lastnum=g[rk[0]][7];
lastid=rk[0];
ans[rk[0]]=g[rk[0]][7];
for(int i=1; i<n; i++)
{
int flag=0;
for(int j=7; j>=0; j--)
if(fabs(g[rk[i]][j]-lastnum)<1e-6)
{
if(lastid<rk[i])
{
ans[rk[i]]=lastnum;
flag=1;
break;
}
}
if(!flag)
{
for(int j=7; j>=0; j--)
if(g[rk[i]][j]<lastnum)
{
ans[rk[i]]=g[rk[i]][j];
lastnum=g[rk[i]][j];
break;
}
}
lastid=rk[i];
}
if(ans[rk[n-1]]!=-1.0) printf("Case %d: %.2f\n",++cas,ans[rk[n-1]]);
else printf("Case %d: No solution\n",++cas);
}
int main()
{
#ifdef debug
freopen("in.in","r",stdin);
#endif
while(scanf("%d",&n)==1&&n)
{
for(int i=0; i<n; i++)
cin>>a[i].v[0]>>a[i].v[1]>>a[i].v[2];
for(int i=0; i<n; i++)
{
cin>>rk[i];
rk[i]--;
}
make();
solve();
}
return 0;
}
UVA 1612(p254)----Guess
最新推荐文章于 2020-01-18 10:43:29 发布