Submission #1047771

#TimeUsernameProblemLanguageResultExecution timeMemory
1047771vjudge1Rectangles (IOI19_rect)C++17
23 / 100
424 ms518816 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); } long long count_rectangles(std::vector<std::vector<int> > a) { grid=a; n=a.size(); m=a[0].size(); 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{ 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; } 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...