Submission #1054433

#TimeUsernameProblemLanguageResultExecution timeMemory
1054433j_vdd16Team Contest (JOI22_team)C++17
0 / 100
1 ms348 KiB
#include <algorithm> #include <bitset> #include <cstdint> #include <cstring> #include <iostream> #include <limits.h> #include <math.h> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <vector> //#define int long long #define loop(X, N) for(int X = 0; X < (N); X++) #define all(V) V.begin(), V.end() #define rall(V) V.rbegin(), V.rend() using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vector<ii>> vvii; typedef vector<bool> vb; typedef vector<vector<bool>> vvb; int getMax(int* data, int size) { bool isSame = false; int best = 0; for (int i = 1; i < size; i++) { if (data[i] > data[best]) { best = i; isSame = false; } else if (data[i] == data[best]) isSame = true; } if (isSame) return -1; return best; } struct Beaver { int x = 0, y = 0, z = 0; bool operator<(const Beaver& b) const { return x > b.x || (x == b.x && y > b.y) || (x == b.x && y == b.y && z > b.z); } bool operator==(const Beaver& b) const { return x == b.x && y == b.y && z == b.z; } }; bool comp(const Beaver& a, const Beaver& b) { return a.x > b.x || (a.x == b.x && a.y > b.y) || (a.x == b.x && a.y == b.y && a.z > b.z); } signed main() { int n; cin >> n; set<Beaver> beaverSet; vector<Beaver> beavers; loop(i, n) { int x, y, z; cin >> x >> y >> z; beaverSet.insert(Beaver{x, y, z}); } for (auto beaver : beaverSet) beavers.push_back(beaver); n = beavers.size(); int bestScore = -1; int jStart = 1; int prevX = -1; int i = 0; while (i < n) { while (jStart < n && beavers[i].x <= beavers[jStart].x) jStart++; for (int j = jStart; j < n; j++) { if (beavers[i].x == beavers[j].x) continue; for (int k = j + 1; k < n; k++) { int y[3] = { beavers[i].y, beavers[j].y, beavers[k].y }; int z[3] = { beavers[i].z, beavers[j].z, beavers[k].z }; int maxX = 0; int maxY = getMax(y, 3); int maxZ = getMax(z, 3); if (maxX == maxY || maxX == maxZ || maxY == maxZ || maxX == -1 || maxY == -1 || maxZ == -1) continue; bestScore = max(bestScore, beavers[i].x + y[maxY] + z[maxZ]); } } prevX = beavers[i].x; i++; while (i < n && beavers[i].x == prevX) i++; } std::cout << bestScore << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...