Submission #226282

# Submission time Handle Problem Language Result Execution time Memory
226282 2020-04-23T09:48:50 Z emil_physmath UFO (IZhO14_ufo) C++17
75 / 100
2000 ms 102700 KB
#include <iostream>
#include <vector>
using namespace std;

int shots;
int n, m;
vector<vector<int> > a;
vector<int> tcol[1000'000], trow[1000'000];

void Shoot(const vector<int>& t, int v, int vl, int vr, int hei, int dir, vector<int>& ans)
{
    if (ans.size() == shots) return;
    if (t[v] < hei) return;
    if (vl == vr)
    {
        ans.push_back(vr);
        return;
    }
    int vm = (vl + vr) / 2;
    if (dir == 1)
    {
        Shoot(t, v * 2, vl, vm, hei, dir, ans);
        Shoot(t, v * 2 + 1, vm + 1, vr, hei, dir, ans);
    }
    else
    {
        Shoot(t, v * 2 + 1, vm + 1, vr, hei, dir, ans);
        Shoot(t, v * 2, vl, vm, hei, dir, ans);
    }
}
void Add(vector<int>& t, int v, int vl, int vr, int i, int val)
{
    if (vl == vr)
    {
        t[v] += val;
        return;
    }
    int vm = (vl + vr) / 2;
    if (i <= vm) Add(t, v * 2, vl, vm, i, val);
    else Add(t, v * 2 + 1, vm + 1, vr, i, val);
    t[v] = max(t[v * 2], t[v * 2 + 1]);
}
void SetRow(int i, int v, int vl, int vr)
{
    if (vl == vr)
    {
        a[i][vr] = trow[i][v];
        return;
    }
    int vm = (vl + vr) / 2;
    SetRow(i, v * 2, vl, vm);
    SetRow(i, v * 2 + 1, vm + 1, vr);
}
int main()
{
    int qnum, anpetq;
    cin >> n >> m >> shots >> qnum >> anpetq;
    a.resize(n, vector<int>(m));
    for (int i = 0; i < n; ++i)
        trow[i].resize(4 * m);
    for (int j = 0; j < m; ++j)
        tcol[j].resize(4 * n);
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
        {
            cin >> a[i][j];
            Add(trow[i], 1, 0, m - 1, j, a[i][j]);
            Add(tcol[j], 1, 0, n - 1, i, a[i][j]);
        }
    while (qnum--)
    {
        char dir;
        int i, hei;
        cin >> dir >> i >> hei;
        int j = --i;
        vector<int> col;
        vector<int> row;
        if (dir == 'W')
            Shoot(trow[i], 1, 0, m - 1, hei, 1, col);
        else if (dir == 'E')
            Shoot(trow[i], 1, 0, m - 1, hei, -1, col);
        else if (dir == 'N')
            Shoot(tcol[j], 1, 0, n - 1, hei, 1, row);
        else // 'S'
            Shoot(tcol[j], 1, 0, n - 1, hei, -1, row);
        if (dir == 'W' || dir == 'E')
            for (int j: col)
            {
                Add(trow[i], 1, 0, m - 1, j, -1);
                Add(tcol[j], 1, 0, n - 1, i, -1);
            }
        else
            for (int i: row)
            {
                Add(trow[i], 1, 0, m - 1, j, -1);
                Add(tcol[j], 1, 0, n - 1, i, -1);
            }
    }
    for (int i = 0; i < n; ++i)
        SetRow(i, 1, 0, m - 1);
    int ans = 0;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
#ifdef MANSON
            cerr << a[i][j] << ' ';
#endif
            if (i + anpetq >= n || j + anpetq >= m) continue;
            int cur = 0;
            for (int di = 0; di < anpetq; ++di)
                for (int dj = 0; dj < anpetq; ++dj)
                    cur += a[i + di][j + dj];
            ans = max(ans, cur);
        }
#ifdef MANSON
        cerr << '\n';
#endif
    }
    cout << ans;
}

Compilation message

ufo.cpp: In function 'void Shoot(const std::vector<int>&, int, int, int, int, int, std::vector<int>&)':
ufo.cpp:12:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ans.size() == shots) return;
         ~~~~~~~~~~~^~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 29 ms 47232 KB Output isn't correct
2 Correct 29 ms 47360 KB Output is correct
3 Correct 32 ms 47352 KB Output is correct
4 Correct 57 ms 47744 KB Output is correct
5 Correct 204 ms 49912 KB Output is correct
6 Incorrect 494 ms 67836 KB Output isn't correct
7 Correct 900 ms 92344 KB Output is correct
8 Correct 659 ms 88560 KB Output is correct
9 Correct 920 ms 86960 KB Output is correct
10 Correct 1109 ms 87664 KB Output is correct
11 Correct 821 ms 86204 KB Output is correct
12 Correct 1143 ms 87884 KB Output is correct
13 Correct 1363 ms 91888 KB Output is correct
14 Correct 1169 ms 86408 KB Output is correct
15 Correct 1439 ms 89328 KB Output is correct
16 Correct 743 ms 88480 KB Output is correct
17 Execution timed out 2066 ms 96264 KB Time limit exceeded
18 Incorrect 687 ms 89336 KB Output isn't correct
19 Correct 889 ms 90872 KB Output is correct
20 Execution timed out 2047 ms 102700 KB Time limit exceeded