제출 #1280276

#제출 시각아이디문제언어결과실행 시간메모리
1280276akmuhammet_sT-Covering (eJOI19_covering)C++20
20 / 100
334 ms8508 KiB
#include "bits/stdc++.h" using namespace std; #define mod 998244353 #define ll long long #define ff first #define ss second #define pb push_back #define N 24 #define maxn 200005 ll n,m,k; vector<ll> a[maxn]; pair<ll,ll> p[maxn]; ll calc(ll qq){ bool mm[n+5][m+5]; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) mm[i][j]=false; ll ans=0; for(ll i=1; i<=k; i++){ ll x=p[i].ff,y=p[i].ss; if(qq%4==0){ if(x==1 or y==1 or y==m) return -1; if(mm[x][y] or mm[x][y+1] or mm[x-1][y] or mm[x][y-1]) return -1; ans+=a[x][y]+a[x][y+1]+a[x-1][y]+a[x][y-1]; mm[x][y]=mm[x][y+1]=mm[x-1][y]=mm[x][y-1]=true; } if(qq%4==1){ if(x==1 or y==1 or x==n) return -1; if(mm[x][y] or mm[x+1][y] or mm[x-1][y] or mm[x][y-1]) return -1; ans+=a[x][y]+a[x+1][y]+a[x-1][y]+a[x][y-1]; mm[x][y]=mm[x+1][y]=mm[x-1][y]=mm[x][y-1]=true; } if(qq%4==2){ if(x==1 or y==m or x==n) return -1; if(mm[x][y] or mm[x+1][y] or mm[x][y+1] or mm[x-1][y]) return -1; ans+=a[x][y]+a[x+1][y]+a[x][y+1]+a[x-1][y]; mm[x][y]=mm[x+1][y]=mm[x][y+1]=mm[x-1][y]=true; } if(qq%4==3){ if(y==1 or y==m or x==n) return -1; if(mm[x][y] or mm[x+1][y] or mm[x][y+1] or mm[x][y-1]) return -1; ans+=a[x][y]+a[x+1][y]+a[x][y+1]+a[x][y-1]; mm[x][y]=mm[x+1][y]=mm[x][y+1]=mm[x][y-1]=true; } qq/=4; } return ans; } void solve(){ cin>>n>>m; for(ll i=1; i<=n; i++){ a[i].pb(0ll); ll x; for(ll j=1; j<=m; j++){ cin>>x; a[i].pb(x); } } cin>>k; for(ll i=1; i<=k; i++){ cin>>p[i].ff>>p[i].ss; p[i].ff++; p[i].ss++; } if(k<=10){ ll ans=-1,cnt=0; for(ll i=0; i<pow(4,k); i++){ ll x=calc(i); ans=max(ans,x); } if(ans==-1) cout<<"No\n"; else cout<<ans<<'\n'; return; } ll sum=0ll; for(ll i=1; i<=k; i++){ ll x=0ll; bool aa,b,c,d; aa=(p[i].ff>1); b=(p[i].ss>1); c=(p[i].ff<n); d=(p[i].ss<m); // p[i].ff++; // p[i].ss++; if(aa and b and d){ x=max(x,a[p[i].ff][p[i].ss]+a[p[i].ff-1][p[i].ss]+a[p[i].ff][p[i].ss-1]+a[p[i].ff][p[i].ss+1]); } if(aa and c and d){ x=max(x,a[p[i].ff][p[i].ss]+a[p[i].ff-1][p[i].ss]+a[p[i].ff+1][p[i].ss]+a[p[i].ff][p[i].ss+1]); } if(aa and b and c){ x=max(x,a[p[i].ff][p[i].ss]+a[p[i].ff-1][p[i].ss]+a[p[i].ff][p[i].ss-1]+a[p[i].ff+1][p[i].ss]); } if(c and b and d){ x=max(x,a[p[i].ff][p[i].ss]+a[p[i].ff][p[i].ss-1]+a[p[i].ff][p[i].ss+1]+a[p[i].ff+1][p[i].ss]); } sum+=x; } cout<<sum<<'\n'; } int main(){ // freopen("in.txt","w",stdout); // freopen("out.txt","r",stdin); ios_base::sync_with_stdio(0); cin.tie(0); ll t=1; // cin>>t; while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...