Submission #839785

#TimeUsernameProblemLanguageResultExecution timeMemory
839785model_codeSoccer Stadium (IOI23_soccer)C++17
1.50 / 100
267 ms33956 KiB
// incorrect/solution_checkregular_wa.cpp

#include "soccer.h"

#define xx first
#define yy second

bool is_unimodal(std::vector<std::pair<int, int>> &ivs)
{
    bool res = true;

    int state = 0;
    for (int i = 1; i < (int)ivs.size();)
    {
        int prev_len = ivs[i - 1].yy - ivs[i - 1].xx,
            curr_len = ivs[i].yy - ivs[i].xx;

        if (state == 0)
        {
            if (prev_len <= curr_len)
            {
                i++;
            }
            else
            {
                state = 1;
            }
        }
        else
        {
            if (prev_len >= curr_len)
            {
                i++;
            }
            else
            {
                res = false;
                break;
            }
        }
    }

    return res;
}

bool is_subintervaled(std::vector<std::pair<int, int>> &ivs)
{
    bool res = true;
    for (const std::pair<int, int> &p : ivs)
    {
        for (const std::pair<int, int> &q : ivs)
        {
            res &= (p.xx <= q.xx && q.yy <= p.yy) || (q.xx <= p.xx && p.yy <= q.yy);
        }
    }

    return res;
}

int biggest_stadium(int N, std::vector<std::vector<int>> C)
{
    int cnt = 0, lens = 0;
    std::vector<std::pair<int, int>> ivs;
    for (int i = 0; i < N; ++i)
    {
        int mn = 1e9, mx = -1e9;
        for (int j = 0; j < N; ++j)
        {
            cnt += C[i][j] == 0;
            if (C[i][j] == 0)
            {
                mn = std::min(mn, j);
                mx = std::max(mx, j);
            }
        }

        if (mn <= mx)
        {
            ivs.push_back({mn, mx});
            lens += mx - mn + 1;
        }
    }

    if (lens != cnt)
        return 1e9; // has holes
    return is_unimodal(ivs) && is_subintervaled(ivs) ? cnt : (int)1e9;
}
#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...