Submission #169799

# Submission time Handle Problem Language Result Execution time Memory
169799 2019-12-22T22:06:26 Z arthur_nascimento Rectangles (IOI19_rect) C++14
0 / 100
5000 ms 504 KB
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define debug 
#define ll long long
#define maxn 2525

int M[maxn][maxn];

int n,m;

int line(int i,int yi,int yf){
	int r = 1;
	for(int j=yi;j<=yf;j++)
		if(M[i][j] >= M[i][yi-1] || M[i][j] >= M[i][yf+1]) r = 0;
	return r;
}

int column(int j,int xi,int xf){
	int r = 1;
	for(int i=xi;i<=xf;i++)
		if(M[i][j] >= M[xi-1][j] || M[i][j] >= M[xf+1][j]) r = 0;
	return r;
}

int check(int xi,int xf,int yi,int yf){
	int r = 1;
	assert(xi >= 1 && xf <= n-2 && yi >= 1 && yf <= m-2);
	for(int i=xi;i<=xf;i++)
		r *= line(i,yi,yf);
	for(int j=yi;j<=yf;j++)
		r *= column(j,xi,xf);
	return r;
} 

ll go4(int xi,int xf,int yi,int yf){

	if(xi > xf || yi > yf) return 0;
	ll ans = check(xi,xf,yi,yf);
	
	int mx = -1, id = -1;
	
	for(int i=yi;i<=yf;i++)
		if(M[xi][i] > mx){
			mx = M[xi][i];
			id = i;
		}
		
	ans += go4(xi,xf,yi,id-1) + go4(xi,xf,id+1,yf);
	return ans;

}

ll go3(int xi,int xf,int yi,int yf,int ym){

	if(xi == 0 || xf == n-1) return 0;
	if(xi > xf) return 0;
	
	int A = ym, B = ym;
	
	while(1){
		A--;
		if(A == 0) break;
		int ok = 1;
		for(int i=xi;i<=xf;i++)
			if(M[i][A] >= M[xi-1][A] || M[i][A] >= M[xf+1][A]) ok = 0;
		if(ok == 0) break;
	}
	A++;
	
	while(1){
		B++;
		if(B == m-1) break;
		int ok = 1;
		for(int i=xi;i<=xf;i++)
			if(M[i][B] >= M[xi-1][B] || M[i][B] >= M[xf+1][B]) ok = 0;
	}
	B--;
	
	debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
	
	return go4(xi,xf,A,B);

}

ll go2(int xi,int xf,int yi,int yf,int ym){
	
	if(xi > xf) return 0;
	debug("go2 x %d~%d y %d~%d\n",xi,xf,yi,yf);
	
	int mx = -1, id = -1;
	
	for(int i=xi;i<=xf;i++)
		if(M[i][ym] > mx){
			mx = M[i][ym];
			id = i;
		}
		
	ll ans = go3(xi,id-1,yi,yf,ym) + go3(id+1,xf,yi,yf,ym) + go2(xi,id-1,yi,yf,ym) + go2(id+1,xf,yi,yf,ym);
	
	return ans;

}

ll go(int yi,int yf){

	if(yi > yf) return 0;
	
	int ym = (yi+yf)/2;
	debug("oi\n");
	
	ll ans = go(yi,ym-1) + go(ym+1,yf) + go2(0,n-1,yi,yf,ym);
	
	return ans;

}

long long count_rectangles(std::vector<std::vector<int> > a) {
	
	 n = a.size();
	 m = a[0].size();
	
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			M[i][j] = a[i][j];
			
	return go(0,m-1);
	
}

Compilation message

rect.cpp: In function 'long long int go3(int, int, int, int, int)':
rect.cpp:75:7: warning: variable 'ok' set but not used [-Wunused-but-set-variable]
   int ok = 1;
       ^~
rect.cpp:81:51: warning: left operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                   ^~
rect.cpp:81:54: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                      ^~
rect.cpp:81:57: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                         ^~
rect.cpp:81:60: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                            ^~
rect.cpp:81:63: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                               ^
rect.cpp:81:65: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go3 x: %d~%d y: %d~%d quebra A %d B %d\n",xi,xf,yi,yf,A,B);
                                                                 ^
rect.cpp: In function 'long long int go2(int, int, int, int, int)':
rect.cpp:90:32: warning: left operand of comma operator has no effect [-Wunused-value]
  debug("go2 x %d~%d y %d~%d\n",xi,xf,yi,yf);
                                ^~
rect.cpp:90:35: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go2 x %d~%d y %d~%d\n",xi,xf,yi,yf);
                                   ^~
rect.cpp:90:38: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go2 x %d~%d y %d~%d\n",xi,xf,yi,yf);
                                      ^~
rect.cpp:90:41: warning: right operand of comma operator has no effect [-Wunused-value]
  debug("go2 x %d~%d y %d~%d\n",xi,xf,yi,yf);
                                         ^~
rect.cpp: In function 'long long int go(int, int)':
rect.cpp:111:15: warning: statement has no effect [-Wunused-value]
  debug("oi\n");
               ^
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 504 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 504 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 504 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 504 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 5009 ms 504 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 4 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 504 KB Output isn't correct
2 Halted 0 ms 0 KB -