Submission #1364679

#TimeUsernameProblemLanguageResultExecution timeMemory
1364679retr0foxxSoccer Stadium (IOI23_soccer)C++20
25 / 100
184 ms31908 KiB
#include "soccer.h"
#include <iostream>

#define pii std::pair<int, int>

int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
	std::vector<pii> woah;

	int cnt0 = 0;
	int possible = 1;
	for (int i = 0; i < N; ++i)
	{
		int state = 0;
		pii current(-1, -1);
		for (int j = 0; j < N; ++j)
		{
			if (F[i][j] == 0)
			{
				++cnt0;
				if (state == 0)
					state = 1;
				else if (state == 2)
					state = 3;
				
				if (current.first == -1)
					current = pii(j, j-1);

				++current.second;
			}
			else
			{
				if (state == 1)
					state = 2;
			}
		}
		if (state == 3) possible = 0;
		if (current.first != -1)
			woah.push_back(current);
	}
	
	for (int i = 0; i < N; ++i)
	{
		int state = 0;
		for (int j = 0; j < N; ++j)
		{
			if (F[j][i] == 0)
			{
				if (state == 0)
					state = 1;
				else if (state == 2)
					state = 3;
			}
			else
			{
				if (state == 1)
					state = 2;
			}
		}
		if (state == 3) possible = 0;
	}
	
	for (int i = 0; i < woah.size(); ++i)
	{
		for (int j = 0; j < woah.size(); ++j)
		{
			pii &a = woah[i], &b = woah[j];
			// printf("%i,%i with %i,%i\n", a.first, a.second, b.first, b.second);
			if (!(a.first <= b.first && b.second <= a.second) && !(b.first <= a.first && a.second <= b.second))
				possible = 0;
		}
	}
	
	if (possible)
		return cnt0;

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...