Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- #define X first
- #define Y second
- #define mk make_pair
- #define inb push_back
- #define y1 ggggggggggggg
- int solve();
- int main()
- {
- solve();
- return 0;
- }
- const int BUFSZ = (int)1e6 + 7;
- char buf[BUFSZ];
- string get_str()
- {
- scanf(" %s", buf);
- return string(buf);
- }
- const double INF = (double)1e9 + 7;
- int solve()
- {
- int n;
- scanf("%d", &n);
- vector<string> a(n);
- vector<pair<int, int>> t(n);
- set<pair<int, int>> q;
- for (int i = 0; i < n; ++i)
- {
- a[i] = get_str();
- int x, x1, y, y1;
- scanf("%d.%d %d.%d", &x, &x1, &y, &y1);
- t[i].X = x * 100 + x1;
- t[i].Y = y * 100 + y1;
- //printf("%d %d\n", t[i].X, t[i].Y);
- q.insert(mk(t[i].X, i));
- }
- int ans = INF;
- vi anss;
- for (int i = 0; i < n; ++i)
- {
- int cans = t[i].Y;
- if (cans > ans)
- continue;
- q.erase(mk(t[i].X, i));
- for (int j = i + 1; j < n; ++j)
- {
- cans += t[j].Y;
- q.erase(mk(t[j].X, j));
- if (cans > ans)
- continue;
- for (int k = j + 1; k < n; ++k)
- {
- if (k == j)
- continue;
- cans += t[k].Y;
- q.erase(mk(t[k].X, k));
- if (cans > ans)
- continue;
- pair<double, int> kek = *q.begin();
- cans += kek.X;
- if (cans < ans)
- ans = cans, anss = { kek.Y, i, j, k };
- cans -= t[k].Y;
- cans -= kek.X;
- q.insert(mk(t[k].X, k));
- }
- q.insert(mk(t[j].X, j));
- cans -= t[j].Y;
- }
- q.insert(mk(t[i].X, i));
- cans -= t[i].Y;
- }
- printf("%d.", ans / 100);
- if (ans % 100 < 10)
- printf("0");
- printf("%d\n", ans % 100);
- for (int i = 0; i < anss.size(); ++i)
- {
- for (char c : a[anss[i]])
- printf("%c", c);
- puts("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement