Submission #413532

#TimeUsernameProblemLanguageResultExecution timeMemory
413532aryan12Orchard (NOI14_orchard)C++17
25 / 25
320 ms33612 KiB
#include <bits/stdc++.h> using namespace std; #define int long long mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); void Solve() { int n, m; cin >> n >> m; int total = 0; int a[n + 1][m + 1]; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cin >> a[i][j]; total += a[i][j]; if(a[i][j] == 0) { a[i][j] = -1; } } } int grid[n + 1][m + 1]; for(int i = 0; i <= n; i++) { for(int j = 0; j <= m; j++) { grid[i][j] = 0; } } grid[1][1] = a[1][1]; for(int i = 2; i <= n; i++) {; grid[i][1] = grid[i - 1][1] + a[i][1]; } for(int i = 2; i <= m; i++) { grid[1][i] = grid[1][i - 1] + a[1][i]; } for(int i = 2; i <= n; i++) { for(int j = 2; j <= m; j++) { grid[i][j] = grid[i - 1][j] + grid[i][j - 1] - grid[i - 1][j - 1] + a[i][j]; } } /*for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << grid[i][j] << " "; } cout << "\n"; }*/ //cout << "total = " << total << "\n"; int ans = INT_MAX; for(int left = 1; left <= n; left++) { for(int right = left; right <= n; right++) { int left_col = 0; for(int column = 1; column <= m; column++) { int sum = grid[right][column] - grid[left - 1][column] - grid[right][left_col] + grid[left - 1][left_col]; int possible = (right - left + 1) * (column - left_col); int zeros = (possible - sum) / 2; int ones = total - (possible - zeros); ans = min(ans, zeros + ones); if(sum < 0) { left_col = column; } } } } cout << ans << "\n"; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while(t--) { Solve(); } 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...