Submission #429418

#TimeUsernameProblemLanguageResultExecution timeMemory
429418APROHACKRectangles (IOI19_rect)C++14
10 / 100
5 ms384 KiB
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long count_rectangles(std::vector<std::vector<int> > a) {
	n=a.size(), m=a[0].size();
	//cout<<n<<m<<endl;
	long long rta = 0;
	if(n==3){
		for(int i = 1 ; i < m-1 ; i++){
			int mx=0;
			for(int j = i ; j< m-1 ; j++){
				mx=max(a[1][j], mx);
				if(a[1][j]>=a[0][j]||a[1][j]>=a[2][j]||a[1][j]>=a[1][i-1])break;
				if(mx<a[1][j+1])rta++;
			}

		}
	}else{
		bool flag;
		int ps, ps2, limx, limy;
		for(int i = 1 ; i < n-1 ; i++ ){
			for(int j = 1 ; j < m-1 ; j++){
				flag= false;
				if(a[i][j]==0&&a[i-1][j]==1&&a[i][j-1]==1){
					int it = i+1;
					while(it<n-1 && a[it][j]==0){
						if(a[it][j-1]!=1){
							flag = true;
							break;
						}
						//cout<<it<<" "<<j<<endl;
						it++;
					}
					if(flag)continue;
					it--;
					if(a[it+1][j]!=1)continue;
					
					ps=it;
					it=j+1;
					while(it<m-1 && a[ps][it]==0){
						if(a[ps+1][it]!=1){
							flag = true;
							break;
						}
						//cout<<i<<" "<<it<<endl;
						it++;
					}
					if(flag)continue;
					it--;
					if(a[i][it+1]!=1)continue;
					ps2=it;
					limy=ps;
					limx=ps2;
					it=ps-1;
					while(it>0 && a[it][ps2]==0){
						if(a[it][ps2+1]!=1){
							flag = true;
							break;
						}
						//cout<<it<<" "<<ps2<<endl;
						it--;
					}
					if(flag)continue;
					it++;
					if(a[it-1][ps2]!=1)continue;
					ps=it;
					it=ps2-1;
					while(it>0 && a[ps][it]==0){
						if(a[ps-1][it]!=1){
							flag = true;
							break;
						}
						//cout<<ps<<" "<<it<<endl;
						it--;
					}
					if(flag)continue;
					it++;
					if(a[ps][it-1]!=1||ps!=i||it!=j)continue;
					for(int y = i ; y <= limy ; y++){
						for(int x = j ; x<=limx ; x++){
							//recorrido[y][x]=true;
							if(a[y][x]==1){
								flag=true;
								break;
							}
						}
						if(flag)break;
					}
					if(!flag){
						rta++;
						//cout<<i<<" "<<j<<endl;
					}
				}
			}
		}
	}
	return rta;
}
#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...