Submission #1181793

#TimeUsernameProblemLanguageResultExecution timeMemory
1181793anteknneDango Maker (JOI18_dango_maker)C++20
100 / 100
148 ms9336 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; #define pb push_back #define pii pair<int, int> #define pll pair<ll, ll> #define st first #define nd second #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define debug false const int MAXN = 3000 + 17; char a[MAXN][MAXN]; int dp[MAXN]; int dppion[MAXN]; int dppoziom[MAXN]; int main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { cin >> a[i][j]; } } int wyn = 0; for (int i = 1; i <= n + m - 1; i ++) { int ind = 1; for (int j = min(i, n); j >= 0; j --) { if (i - j > m) { break; } dppion[ind] = max(dp[ind - 1], dppion[ind - 1]); dppoziom[ind] = max(dp[ind - 1], dppoziom[ind - 1]); dp[ind] = max(dppion[ind], dppoziom[ind]); if (j - 1 >= 1 && j + 1 <= n) { if (a[j - 1][i - j] == 'R' && a[j][i - j] == 'G' && a[j + 1][i - j] == 'W') { dppion[ind] ++; } } if (i - j - 1 >= 1 && i - j + 1 <= m) { if (a[j][i - j - 1] == 'R'&& a[j][i - j] == 'G' && a[j][i - j + 1] == 'W') { dppoziom[ind] ++; } } //cout << i << " " << ind << ": " << dp[ind] << " " << dppion[ind] << " " << dppoziom[ind] << "\n"; ind ++; } wyn += max(dp[ind - 1], max(dppion[ind - 1], dppoziom[ind - 1])); memset(dp, 0, sizeof(dp)); memset(dppoziom, 0, sizeof(dppoziom)); memset(dppion, 0, sizeof(dppion)); } cout << wyn << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...