Submission #1047806

#TimeUsernameProblemLanguageResultExecution timeMemory
1047806vjudge1Rectangles (IOI19_rect)C++17
23 / 100
434 ms518696 KiB
#include "rect.h" #include <bits/stdc++.h> using namespace std; const int lim=3000; using pii=pair<int,int>; vector<vector<int>>grid; int n,m,l,r,x,y,cnt; bool vis[lim][lim]; void dfs(int i,int j){ if(vis[i][j])return; vis[i][j]=1; cnt++; l=min(l,i); r=max(r,i); x=min(x,j); y=max(y,j); if(i&&!grid[i-1][j])dfs(i-1,j); if(j&&!grid[i][j-1])dfs(i,j-1); if(i+1<n&&!grid[i+1][j])dfs(i+1,j); if(j+1<m&&!grid[i][j+1])dfs(i,j+1); } const int llim=100; int mincol[llim][llim][llim],minrow[llim][llim][llim]; long long count_rectangles(std::vector<std::vector<int> > a) { grid=a; n=a.size(); m=a[0].size(); bool ok=1; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]!=1&&a[i][j]!=0){ ok=0; goto outtt; } } } outtt:; if(n<3)return 0; if(n==3){ vector<int>st; long int ans=0; for(int i=0;i<m;i++){ if(1<st.size()) for(int j=int(st.size())-2;0<=j;j--){ if(a[1][st[j+1]]<a[1][i]){ ans++; }else{ break; } } while(st.size()&&a[1][st.back()]<a[1][i]){ st.pop_back(); } if(a[0][i]<=a[1][i]||a[2][i]<=a[1][i]){ st.clear(); } st.push_back(i); } return ans; }else if(ok){ int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]==0&&!vis[i][j]){ l=x=INT_MAX; r=y=0; cnt=0; dfs(i,j); if(l&&x&&r!=n-1&&y!=m-1&&cnt==(r-l+1)*(y-x+1)){ ans++; } } } } return ans; }else{ for(int i=0;i<n;i++){ for(int l=0;l<m;l++){ mincol[i][l][l]=a[i][l]; for(int r=l+1;r<m;r++){ mincol[i][l][r]=max(a[i][r],mincol[i][l][r-1]); } } } for(int i=0;i<m;i++){ for(int l=0;l<n;l++){ minrow[i][l][l]=a[l][i]; for(int r=l+1;r<n;r++){ mincol[i][l][r]=max(a[r][i],mincol[i][l][r-1]); } } } int ans=0; for(int l=0;l<n;l++){ for(int r=l+2;r<n;r++){ for(int x=0;x<m;x++){ for(int y=x+2;y<m;y++){ for(int i=l+1;i<r;i++){ int mindude=minrow[i][x+1][y-1]; if(a[i][x]<mindude||a[i][y]<mindude){ goto nextcase; } } for(int i=x+1;i<y;i++){ int mindude=mincol[i][l+1][r-1]; if(a[l][i]<mindude||a[r][i]<mindude){ goto nextcase; } } ans++; nextcase:; } } } } return ans; } return -1; }
#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...