#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... |