#include <iostream>
#include <vector>
#include <queue>
using namespace std;
using ll=long long;
int main(){
int n,m,ans=0,k,a,b,cur;
cin>>n>>m;
vector<vector<int>> v(n,vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>v[i][j];
}
}
cin>>k;
bool flag=1;
vector<vector<int>> g(k);
vector<pair<int,int>> p(k);
for(int i=0;i<k;i++){
cin>>a>>b;
p[i]={a,b};
for(int j=0;j<i;j++){
if(abs(a-p[j].first)==0||abs(b-p[j].second)==0){
g[i].push_back(j);
g[j].push_back(i);
}
}
}
for(int i=0;i<k;i++){
a=p[i].first;b=p[i].second;
cur=0;
if(g[i].size()==0){
if((a==0&&b==0)||(a==n-1&&b==m-1))flag=0;
if(a>0&&a<n-1){
if(b<m-1)cur=max(cur,v[a-1][b]+v[a][b]+v[a+1][b]+v[a][b+1]);
if(b>0)cur=max(cur,v[a-1][b]+v[a][b]+v[a+1][b]+v[a][b-1]);
}
if(b>0&&b<m-1){
if(a<n-1)cur=max(cur,v[a][b]+v[a][b-1]+v[a][b+1]+v[a+1][b]);
if(a>0)cur=max(cur,v[a][b]+v[a][b-1]+v[a][b+1]+v[a-1][b]);
}}
else{
if(g[i].size()>1)flag=0;
else{
if(p[g[i][0]].first-a==1){
if(a>0&&b>0&&b<m-1){
cur=v[a][b]+v[a][b+1]+v[a][b-1]+v[a-1][b];
}else{
flag=0;
}
}
if(p[g[i][0]].first-a==-1){
if(a<n-1&&b>0&&b<m-1){
cur=v[a][b]+v[a][b+1]+v[a][b-1]+v[a+1][b];
}else{
flag=0;
}
}
if(p[g[i][0]].second-b==1){
if(b>0&&a>0&&a<n-1){
cur=v[a][b]+v[a+1][b]+v[a+1][b]+v[a][b-1];
}else{
flag=0;
}
}
if(p[g[i][0]].second-b==-1){
if(b<m-1&&a>0&&a<n-1){
cur=v[a][b]+v[a+1][b]+v[a+1][b]+v[a][b+1];
}else{
flag=0;
}
}
}
}
ans+=cur;
}
if(flag)cout<<ans<<"\n";
else cout<<"NO\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |