Submission #503223

#TimeUsernameProblemLanguageResultExecution timeMemory
503223Kirill_MaglyshDango Maker (JOI18_dango_maker)C++17
33 / 100
307 ms262148 KiB
#include <iostream> #include <vector> #include <set> #include <map> #include <algorithm> #define printLn(n) cout << n << '\n' using namespace std; typedef int ll; const ll EMPTY = 0; const ll HORIZONTAL = 1; const ll VERTICAL = 2; ll readLL(); string readStr(); void resolve(); bool check(const vector<vector<char>> &field, ll i, ll j, ll dir); int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); resolve(); return 0; } void resolve() { ll height = readLL(); ll width = readLL(); vector<vector<char>> field(height + 2, vector<char>(width + 2, '#')); for (ll i = 1; i <= height; ++i) { string str = readStr(); for (ll j = 1; j <= width; ++j) { field[i][j] = str[j-1]; } } vector<vector<vector<ll>>> dp(height + 2, vector<vector<ll>>(width + 2, vector<ll>(3, 0))); ll res = 0; for (ll i = 1; i <= height; ++i) { for (ll j = 1; j <= width; ++j) { ll prevHor = dp[i - 1][j + 1][HORIZONTAL]; ll prevVer = dp[i - 1][j + 1][VERTICAL]; ll prevEmp = dp[i - 1][j + 1][EMPTY]; dp[i][j][EMPTY] = max(prevEmp, max(prevHor, prevVer)); if (check(field, i, j, VERTICAL)) { dp[i][j][VERTICAL] = 1 + max(prevVer, prevEmp); } if (check(field, i, j, HORIZONTAL)) { dp[i][j][HORIZONTAL] = 1 + max(prevHor, prevEmp); } if (i == height || j == 1) { res += max(dp[i][j][EMPTY], max(dp[i][j][HORIZONTAL], dp[i][j][VERTICAL])); } } } // for (int i = 1; i <= height; ++i) { // for (int j = 1; j <= width; ++j) { // cout << "{" << dp[i][j][0] << dp[i][j][1] << dp[i][j][2] << "}" << " "; // } // // printLn(""); // } printLn(res); } bool check(const vector<vector<char>> &field, ll i, ll j, ll dir) { if (dir == HORIZONTAL) { return (field[i][j - 1] == 'R' && field[i][j] == 'G' && field[i][j + 1] == 'W'); } else if (dir == VERTICAL) { return (field[i - 1][j] == 'R' && field[i][j] == 'G' && field[i + 1][j] == 'W'); } return false; } ll readLL() { ll num; cin >> num; return num; } string readStr() { string num; cin >> num; return num; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...