Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cassert>
- #include <cmath>
- #include <ctime>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <queue>
- #include <deque>
- #include <list>
- #include <set>
- #include <map>
- using namespace std;
- #define pb push_back
- #define mp make_pair
- #define eprintf(...) fprintf(stderr, __VA_ARGS__)
- #define sz(x) ((int)(x).size())
- #define TASKNAME "cards"
- typedef long long ll;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<bool> vb;
- typedef vector<vb> vvb;
- typedef pair<int, int> pii;
- const int MAXN = 1010;
- vi ws[MAXN + 1];
- int main() {
- freopen(TASKNAME".in", "r", stdin);
- freopen(TASKNAME".out", "w", stdout);
- int tn;
- scanf("%d", &tn);
- while (tn --> 0) {
- int n, w, h;
- scanf("%d%d%d", &n, &w, &h);
- for (int i = 0; i <= n; i++) ws[i].clear();
- ws[1].pb(w);
- ws[1].pb(h);
- sort(ws[1].begin(), ws[1].end());
- vi tmp, tmp2;
- for (int cn = 2; cn <= n; cn++) {
- for (int l = 1; l < cn; l++) {
- int r = cn - l;
- tmp.resize(sz(ws[l]));
- tmp.erase(set_intersection(ws[l].begin(), ws[l].end(), ws[r].begin(), ws[r].end(), tmp.begin()), tmp.end());
- tmp2.resize(sz(ws[cn]) + sz(tmp));
- tmp2.erase(set_union(ws[cn].begin(), ws[cn].end(), tmp.begin(), tmp.end(), tmp2.begin()), tmp2.end());
- ws[cn].swap(tmp2);
- }
- tmp.resize(sz(ws[cn]));
- int sq = cn * w * h;
- for (int i = 0; i < sz(ws[cn]); i++) {
- tmp[i] = sq / ws[cn][i];
- }
- reverse(tmp.begin(), tmp.end());
- tmp2.resize(2 * sz(ws[cn]));
- tmp2.erase(set_union(tmp.begin(), tmp.end(), ws[cn].begin(), ws[cn].end(), tmp2.begin()), tmp2.end());
- ws[cn].swap(tmp2);
- /* eprintf("cn=%d: ", cn);
- for (int i = 0; i < sz(ws[cn]); i++)
- eprintf("%d%c", ws[cn][i], "\n "[i + 1 < sz(ws[cn])]);*/
- }
- int ans = 2e9;
- int sq = n * w * h;
- for (int i = 0; i < sz(ws[n]); i++) {
- int w = ws[n][i];
- int h = sq / w;
- ans = min(ans, w + h);
- }
- printf("%d\n", ans * 2);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement