제출 #1290746

#제출 시각아이디문제언어결과실행 시간메모리
1290746enzyRectangles (IOI19_rect)C++20
13 / 100
511 ms497572 KiB
#include "rect.h" #include<bits/stdc++.h> #define ll long long using namespace std; const ll maxn=2502; int v[maxn][maxn], marc[maxn][maxn], ma_col[maxn*maxn], me_col[maxn*maxn], qtd[maxn*maxn], ma_lin[maxn*maxn], me_lin[maxn*maxn], n, m, pd[maxn*maxn]; int dx[]={1,-1,0,0}, dy[]={0,0,1,-1}; bool in(int x, int y){ return 1<=x&&x<=n&&1<=y&&y<=m; } void dfs(int x, int y, int c){ qtd[c]++; marc[x][y]=c; ma_col[c]=max(ma_col[c],y); me_col[c]=min(me_col[c],y); ma_lin[c]=max(ma_lin[c],x); me_lin[c]=min(me_lin[c],x); if(ma_lin[c]==n||me_lin[c]==1) pd[c]=0; if(ma_col[c]==m||me_col[c]==1) pd[c]=0; //cout << x << ' ' << y << " " << pd[c] << endl; for(int i=0;i<4;i++){ int nx=x+dx[i], ny=y+dy[i]; if(in(nx,ny)&&v[nx][ny]&&marc[nx][ny]==0) dfs(nx,ny,c); } } ll count_rectangles(vector<vector<int> > a){ n=a.size(), m=a[0].size(); memset(me_col,1,sizeof(me_col)); memset(me_lin,1,sizeof(me_lin)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) v[i+1][j+1]=a[i][j]^1; int c=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(marc[i][j]==0&&v[i][j]){ pd[++c]++; dfs(i,j,c); } } } ll resp=0; for(int i=1;i<=c;i++) if((ma_col[i]-me_col[i]+1)*(ma_lin[i]-me_lin[i]+1)==qtd[i]&&pd[i]) resp++; return resp; }
#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...