제출 #1278402

#제출 시각아이디문제언어결과실행 시간메모리
1278402avighna모자이크 (IOI24_mosaic)C++20
5 / 100
1099 ms69068 KiB
#include <map> #include <numeric> #include <set> #include <vector> using int64 = long long; std::vector<int64> mosaic(std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R) { const int n = X.size(); std::set<int> st; std::map<std::pair<int, int>, int> mp; for (int i = 0; i < n; ++i) { mp[{0, i}] = X[i]; mp[{i, 0}] = Y[i]; } for (int j = 1; j < n; ++j) { mp[{1, j}] = !mp[{0, j}] && !mp[{1, j - 1}]; } for (int i = 1; i < n; ++i) { mp[{i, 1}] = !mp[{i - 1, 1}] && !mp[{i, 0}]; } for (auto &[pt, y] : mp) { if (pt.first != 0 and pt.second != 0 and y != 0) { st.insert(pt.first - pt.second); } } auto get_pt = [&](int x, int y) -> int { if (x == 0) { return X[y]; } if (y == 0) { return Y[x]; } return st.contains(x - y); }; std::vector<int64> ans; for (int i = 0; i < T.size(); ++i) { int x1 = T[i], y1 = L[i], x2 = B[i], y2 = R[i]; int64 cur = 0; for (int u = x1; u <= x2; ++u) { for (int v = y1; v <= y2; ++v) { cur += get_pt(u, v); } } ans.push_back(cur); } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...