| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1330216 | bradley0927 | Grid Coloring (JOI25_ho_t1) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> mp(2*n), a(n), b(n);
vector<vector<int>> grid(n, vector<int>(n));//grid is mapped
for (int i = 0; i < n; i++) {
cin >> a[i];
mp[i] = a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
mp[i+n] = b[i];
}
sort(mp.begin(), mp.end());
mp.erase(unique(mp.begin(), mp.end()), mp.end());
vector<int> count(mp.size(), 0);
int max_cnt = 0, max_idx = 0;
for (int i = 0; i < n; i++) {
grid[i][0] = lower_bound(mp.begin(), mp.end(), a[i]) - mp.begin();
grid[0][i] = lower_bound(mp.begin(), mp.end(), b[i]) - mp.begin();
count[grid[i][0]]++;
count[grid[0][i]]++;
}
count[grid[0][0]]--;//avoid double counting
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
grid[i][j] = max(grid[i-1][j], grid[i][j-1]);
count[grid[i][j]]++;
if (count[grid[i][j]] > max_cnt) {
max_cnt = count[grid[i][j]];
max_idx = grid[i][j];
} else if (count[grid[i][j]] == max_cnt) {
max_idx = max(max_idx, grid[i][j]);//choose color with larger index
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << grid[i][j] << " ";
}
cout << endl;
}
for (int i = 0; i < n; i++) {
cout << count[i] << " ";
}
cout << endl;
cout << mp[max_idx] << " " << max_cnt << endl;
}