#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 2 * 1e4 + 7;
struct Member
{
int score[8];
}mb[maxn];
int n,ans,ids[maxn];
int GetResult()
{
ans = mb[ids[1]].score[7];
for (int i = 2; i <= n; i++) {
int id = ids[i];
int index = lower_bound(mb[id].score, mb[id].score + 8, ans) - mb[id].score;
//都小于
if (index == 8) {
ans = mb[id].score[index - 1];
}
else if (index == 0) {
if (ans == mb[id].score[index] && id > ids[i - 1]) ans = mb[id].score[index];
else return 0;
}
else {
if (mb[id].score[index] > ans || (mb[id].score[index] == ans && id <= ids[i - 1])) ans = mb[id].score[index - 1];
else ans = mb[id].score[index];
}
}
return 1;
}
int main()
{
int kcase = 0;
while (cin >> n && n) {
int a[3];
double b[3];
for (int i = 1; i <= n; i++) {
cin >> b[0] >> b[1] >> b[2];
for (int j = 0; j < 3; j++)
a[j] = (int)(round(b[j] * 100.0));
for (int j = 0; j <= 7; j++) {
mb[i].score[j] = 0;
for (int k = 0; k < 3; k++)
if (j & (1 << k)) mb[i].score[j] += a[k];
}
sort(mb[i].score, mb[i].score + 8);
}
for (int i = 1; i <= n; i++) cin >> ids[i];
cout << "Case " << ++kcase << ": ";
if (GetResult()) cout << fixed << setprecision(2) << ans / 100.0 << endl;
else cout << "No solution" << endl;
}
return 0;
}
习题8-8(uva-1612)
猜你喜欢
转载自blog.csdn.net/seanbill/article/details/116902577
今日推荐
周排行