Submission #1184162

#TimeUsernameProblemLanguageResultExecution timeMemory
1184162JovicaNafta (COI15_nafta)C++20
0 / 100
1 ms832 KiB
#include <bits/stdc++.h> using namespace std; int const maxn = 2001; char pocetno[maxn][maxn]; bool visited[maxn][maxn]; int levo,desno; int mat[maxn][maxn],n,m; void bfs(int pocx,int pocy) { //cout<<"ulava na "<<pocx<<" "<<pocy<<endl; queue<array<int,2> > q;q.push({pocx,pocy}); visited[pocx][pocy] = true; int z = 0;levo = m;desno = -1; while (q.size()) { int x = q.front()[0],y = q.front()[1]; q.pop(); //cout<<"mine "<<x<<" "<<y<<endl; visited[x][y] = true; z += pocetno[x][y] - '0'; levo = min(levo,y);desno = max(desno,y); if (x>0 && visited[x-1][y] == false && pocetno[x-1][y] != '.'){ visited[x-1][y] = true; q.push({x-1,y}); } if (x+1<n && visited[x+1][y] == false && pocetno[x+1][y] != '.'){ visited[x+1][y] = true; q.push({x+1,y}); } if (y>0 && visited[x][y-1] == false && pocetno[x][y-1] != '.'){ visited[x][y-1] = true; q.push({x,y-1}); } if (y+1<m && visited[x][y+1] == false && pocetno[x][y+1] != '.'){ visited[x][y+1] = true; q.push({x,y+1}); } } for (int i=levo;i<=desno;i++) for (int j=levo;j<=desno;j++) mat[i][j] += z; } int dp[maxn][2]; void dnc(int l,int r,int optl,int optr) { if (l>r) return; int mid = (l+r)/2; int ans = mat[mid][mid],p; for (int i=optl;i<min(optr,mid+1);i++){ int x = mat[mid][mid] + dp[i][0] - mat[mid][i]; if (x>ans) { ans = x; p = i; } } dp[mid][1] = ans; dnc(l,mid-1,optl,p); dnc(mid+1,r,p,optr); } int main() { cin>>n>>m; for (int i=0;i<n;i++) for (int j=0;j<m;j++) cin>>pocetno[i][j]; for (int j=0;j<m;j++) for (int i=0;i<n;i++) if (visited[i][j] == false && pocetno[i][j] != '.') bfs(i,j); /*for (int i=0;i<m;i++) { for (int j=0;j<m;j++) cout<<mat[i][j]<<" "; cout<<endl; }*/ int ans = -1; //for (int i=0;i<m;i++) dp[i] = mat[i][i],ans = max(ans,mat[i][i]); //cout<<ans<<"\n"; for (int i=0;i<m;i++) { dnc(0,m-1,0,m-1); for (int j=0;j<m;j++) dp[j][0] = dp[j][1]; ans = -1; for (int j=0;j<m;j++) ans = max(ans,dp[j][0]); cout<<ans<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...