제출 #841850

#제출 시각아이디문제언어결과실행 시간메모리
841850flashmt축구 경기장 (IOI23_soccer)C++17
25 / 100
308 ms31908 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;

int isBad(vector<pair<int, int>> a)
{
  int len = size(a);
  for (int i = 0; i < len; i++)
    for (int j = i + 1; j < len; j++)
    {
      auto [l, r] = a[i];
      auto [ll, rr] = a[j];
      int intersect = min(r, rr) - max(l, ll);
      if (intersect >= 0 && intersect < min(r - l, rr - ll))
        return 1;
    }
  return 0;
}

int biggest_stadium(int n, std::vector<std::vector<int>> a)
{
  int area = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      area += 1 - a[i][j];

  vector<pair<int, int>> rows;
  for (int i = 0; i < n; i++)
  {
    int l = 0, r = n - 1;
    while (l < n && a[i][l])
      l++;
    while (r >= 0 && a[i][r])
      r--;
    if (l <= r)
    {
      for (int j = l; j <= r; j++)
        if (a[i][j])
          return 0;
      rows.push_back({l, r});
    }
  }

  if (isBad(rows))
    return 0;

  vector<pair<int, int>> cols;
  for (int j = 0; j < n; j++)
  {
    int t = 0, b = n - 1;
    while (t < n && a[t][j])
      t++;
    while (b >= 0 && a[b][j])
      b--;
    if (t <= b)
    {
      for (int i = t; i <= b; i++)
        if (a[i][j])
          return 0;
      cols.push_back({t, b});
    }
  }

  if (isBad(cols))
    return 0;

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