Submission #124753

#TimeUsernameProblemLanguageResultExecution timeMemory
124753johuthaOrchard (NOI14_orchard)C++14
25 / 25
405 ms33632 KiB
#include <iostream> #include <vector> #include <algorithm> #define int int64_t using namespace std; struct orchard { vector<vector<int>> orchard; vector<vector<int>> table; int n, m; void printtable() { for (auto t : table) { for (auto i : t) { cout << i << " "; } cout << "\n"; } cout << "\n"; } int prefsum(int x1, int y1, int x2, int y2) { return table[x1][y1] + table[x2][y2] - table[x1][y2] - table[x2][y1]; } int calc(int y1, int y2) { vector<int> arr(m + 1); for (int i = 0; i <= m; i++) { arr[i] = 2*prefsum(y1, i, y2, 0) - i*(y1 - y2); } int mmin = 0; int mp = 0; int maxdiff = 0; pair<int,int> msp = {0, 0}; for (int i = 1; i <= m; i++) { if (arr[i] < mmin) { mmin = arr[i]; mp = i; } if (arr[i] - mmin > maxdiff) { maxdiff = arr[i] - mmin; msp = make_pair(mp, i); } } int in = prefsum(y1, msp.second, y2, msp.first); int wrongin = (msp.second - msp.first) * (y1 - y2) - in; int wrongout = prefsum(n, m, 0, 0) - in; return wrongin + wrongout; } int createtable() { table.resize(n + 1, vector<int>(m + 1)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { table[i + 1][j + 1] = table[i + 1][j] + table[i][j + 1] - table[i][j] + orchard[i][j]; } } int mmin = 100000000000; for (int y1 = 0; y1 <= n; y1++) { for (int y2 = 0; y2 <= y1; y2++) { mmin = min(mmin, calc(y1, y2)); } } return mmin; } }; signed main() { int n, m; cin >> n >> m; orchard orch; orch.n = n; orch.m = m; orch.orchard.resize(n, vector<int>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> orch.orchard[i][j]; } } cout << orch.createtable() << "\n"; }
#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...