Submission #367321

#TimeUsernameProblemLanguageResultExecution timeMemory
367321piddddgyBitaro the Brave (JOI19_ho_t1)C++11
100 / 100
353 ms229740 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; #define cerr if(false) cerr #define watch(x) cerr << (#x) << " is " << (x) << endl; #define endl '\n' #define ld long double #define int long long #define pii pair<int, int> #define fi first #define se second #define sz(a) (int)(a).size() #define all(x) (x).begin(), (x).end() const int maxn = 3005; int n, m; char a[maxn][maxn]; int psa[5][maxn][maxn]; int query(int c, int i, int j, int ii, int jj) { cerr << c << " " << i << " " << j << " " << ii << " " << jj << endl; return psa[c][ii][jj] - psa[c][ii][j-1] - psa[c][i-1][jj] + psa[c][i-1][j-1]; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { string s; cin >> s; for(int j = 1; j <= m; j++) { a[i][j] = s[j-1]; if(a[i][j] == 'J') psa[1][i][j]++; else if(a[i][j] == 'O') psa[2][i][j]++; else if(a[i][j] == 'I') psa[3][i][j]++; } } for(int c = 1; c <= 3; c++) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { psa[c][i][j] += psa[c][i-1][j] + psa[c][i][j-1] - psa[c][i-1][j-1]; } } } int ans = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { if(a[i][j] == 'J') { cerr << "passing in " << i << " " << j << " " << n << " " << j << endl; int ocnt = query(2, i, j, i, m); int icnt = query(3, i, j, n, j); ans += ocnt*icnt; } } } cout << ans << endl; } /* Did you read the bounds? Did you make typos? Are there edge cases (N=1?) Are array sizes proper? Integer overflow? DS reset properly between test cases? Is using long longs causing TLE? Are you using floating points? */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...