This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define ld long double
// #define int __int16_t
#define endl "\n"
const int N = 3e3;
set<int> adj[N*N + 1];
char grid[N + 1][N + 1];
map<pair<pair<int,int>,pair<int,int>>,int> mp;
vector<vector<int>> dp;
int f(int s,int pa,bool type) {
if(dp[s][type] != -1) return dp[s][type];
int res = type;
for(auto u : adj[s]) {
if(u == pa) continue;
res = (res + f(u,s,!type));
}
return dp[s][type] = res;
}
signed main() {
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n,m;
cin>>n>>m;
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
cin>>grid[i][j];
}
}
int curr = 1;
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
int cnt = 0;
if(j <= m - 2 && grid[i][j] == 'R' && grid[i][j + 1] == 'G' && grid[i][j + 2] == 'W') {
mp[{{i,j},{i,j + 2}}] = curr;
// intersect G
pair<pair<int,int>,pair<int,int>> tmp = {{i - 1,j + 1},{i + 1,j + 1}};
if(mp[tmp]) {
adj[curr].insert(mp[tmp]);
adj[mp[tmp]].insert(curr);
}
// intersect W
tmp = {{i - 2,j + 2},{i - 2,j}};
if(mp[tmp]) {
adj[curr].insert(mp[tmp]);
adj[mp[tmp]].insert(curr);
}
curr++;
cnt++;
}
if(i <= m - 2 && grid[i][j] == 'R' && grid[i + 1][j] == 'G' && grid[i + 2][j] == 'W') {
mp[{{i,j},{i + 2,j}}] = curr;
// intersect G
pair<pair<int,int>,pair<int,int>> tmp = {{i + 1,j - 1},{i + 1,j + 1}};
if(mp[tmp]) {
adj[curr].insert(mp[tmp]);
adj[mp[tmp]].insert(curr);
}
curr++;
cnt++;
}
if(cnt == 2) {
adj[curr - 2].insert(curr - 1);
adj[curr - 1].insert(curr - 2);
}
}
}
mp.clear();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |