Submission #425347

#TimeUsernameProblemLanguageResultExecution timeMemory
425347MonchitoSeats (IOI18_seats)C++14
5 / 100
4094 ms35880 KiB
#include "seats.h"
#include <iostream>
using namespace std;

const int MAXN = 1e3;

int grid[MAXN][MAXN], N, M;

void give_initial_chart(int H, int W, vector<int> R, vector<int> C) {
	int cnt=0;
	N = H; M = W;

	for(int i=0; i<H*W; i++) {
		grid[R[i]][C[i]] = cnt;
		cnt++;	
	}
}

void find_position(pair<int,int>& p1, pair<int,int>& p2, int a, int b) {
	bool flag=false;

	for(int i=0; i<N; i++) {
		for(int j=0; j<M; j++) {
			if(grid[i][j] == a) {
				if(!flag) { p1 = { i, j}; flag = true; }
				else p2 = { i, j };
			} 
			
			else if(grid[i][j] == b) {
				if(!flag) { p1 = { i, j}; flag = true; }
				else p2 = { i, j };
			}
		}	
	}
}

bool can(int r1, int r2, int c1, int c2, int k) {
	for(int i=r1; i<=r2; i++) {
		for(int j=c1; j<=c2; j++) {
			if(grid[i][j] >= k) return false;	
		}
	}

	/*
	for(int i=r1; i<=r2; i++) {
		for(int j=c1; j<=c2; j++) 
			cout << grid[i][j] << " ";

		cout << "\n";
	}
	*/

	return true;
}

void print(){
	for(int i=0; i<N; i++) {
		for(int j=0; j<M; j++)
			cout << grid[i][j] << " ";

		cout << "\n";
	}
}

int swap_seats(int a, int b) {
	pair<int,int> p1, p2;
	find_position(p1, p2, a, b);

	swap(grid[p1.first][p1.second], grid[p2.first][p2.second]);

	int ret=0;

	for(int r1=0; r1<N; r1++) {
		for(int r2=r1; r2 < N; r2++) {
			for(int c1=0; c1 < M; c1++) {
				for(int c2=c1; c2 < M; c2++) {
					int k = (r2-r1+1) * (c2-c1+1);
					if(can(r1, r2, c1, c2, k)){
						ret++;
					}
				}
			}	
		}	
	}

	return ret;
}
#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...