답안 #1065888

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1065888 2024-08-19T12:36:37 Z j_vdd16 메기 농장 (IOI22_fish) C++17
0 / 100
1000 ms 22864 KB
#include "fish.h"

#include <algorithm>
#include <bitset>
#include <cstdint>
#include <cstring>
#include <iostream>
#include <limits.h>
#include <math.h>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

#define int long long
#define loop(X, N) for(int X = 0; X < (N); X++)
#define all(V) V.begin(), V.end()
#define rall(V) V.rbegin(), V.rend()

using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vector<ii>> vvii;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;

vvii fishes;
int weightSum(int x, int y1, int y2) {
    if (x >= fishes.size() || y2 <= y1)
        return 0;

    int res = 0;
    for (auto [y, w] : fishes[x]) {
        if (y1 <= y && y < y2)
            res += w;
    }

    return res;
}

long long max_weights(signed N, signed M, vector<signed> X, std::vector<signed> Y, std::vector<signed> W) {
    fishes = vvii(N);
    loop(i, M) {
        fishes[X[i]].push_back({Y[i], W[i]});
    }
    fishes.push_back({});

    loop(x, N) {
        sort(all(fishes[x]));
    }

    vector<map<int, int>> before(N);
    vector<map<int, int>> both(N);

    //bestBefore, bestBeforeAndAfter
    loop(x, N) {
        if (x == 0) {
            for (auto [y, w] : fishes[x + 1]) {
                both[0][y + 1] = weightSum(x + 1, 0, y + 1);
            }
            before[0][0] = 0;

            continue;
        }

        set<ii> heights;
        for (auto [y, w] : fishes[x - 1]) {
            heights.insert({y, w});
        }
        for (auto [y, w] : fishes[x + 1]) {
            heights.insert({y, w});
        }

        int bestBefore2 = 0;
        int bestBoth3 = 0;
        if (x >= 2) {
            for (auto [prevY, prevScore] : before[x - 2])
                bestBefore2 = max(bestBefore2, prevScore);
        }
        if (x >= 3) {
            for (auto [prevY, prevScore] : both[x - 3])
                bestBoth3 = max(bestBoth3, prevScore);
        }

        for (auto [y, w] : heights) {
            for (auto [prevY, prevScore] : before[x - 1]) {
                both[x][y + 1] = max(both[x][y + 1], prevScore + weightSum(x - 1, prevY, y + 1) + weightSum(x + 1, 0, y + 1));
                before[x][y + 1] = max(before[x][y + 1], prevScore + weightSum(x - 1, prevY, y + 1));
            }
            for (auto [prevY, prevScore] : both[x - 1]) {
                both[x][y + 1] = max(both[x][y + 1], prevScore + weightSum(x + 1, 0, y + 1) - weightSum(x, 0, min(prevY, y + 1)) + weightSum(x - 1, prevY, y + 1));
                before[x][y + 1] = max(before[x][y + 1], prevScore - weightSum(x, 0, min(prevY, y + 1)) + weightSum(x - 1, prevY, y + 1));
            }

            both[x][y + 1] = max(both[x][y + 1], bestBefore2 + weightSum(x - 1, 0, y + 1) + weightSum(x + 1, 0, y + 1));
            both[x][y + 1] = max(both[x][y + 1], bestBoth3 + weightSum(x - 1, 0, y + 1) + weightSum(x + 1, 0, y + 1));

            before[x][y + 1] = max(before[x][y + 1], bestBefore2 + weightSum(x - 1, 0, y + 1));
            before[x][y + 1] = max(before[x][y + 1], bestBoth3 + weightSum(x - 1, 0, y + 1));
        }
    }

    int res = 0;
    loop(x, N) {
        for (auto [y, score] : before[x]) {
            res = max(res, score);
        }
        for (auto [y, score] : both[x]) {
            res = max(res, score);
        }
    }

    return res;
}

Compilation message

fish.cpp: In function 'long long int weightSum(long long int, long long int, long long int)':
fish.cpp:35:11: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     if (x >= fishes.size() || y2 <= y1)
      |         ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1040 ms 21300 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Execution timed out 1087 ms 22864 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 13872 KB Output is correct
2 Correct 6 ms 12592 KB Output is correct
3 Incorrect 72 ms 22648 KB 1st lines differ - on the 1st token, expected: '21261825233649', found: '369591758422'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 432 KB Output is correct
9 Incorrect 2 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '254964121270'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 432 KB Output is correct
9 Incorrect 2 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '254964121270'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 432 KB Output is correct
9 Incorrect 2 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '254964121270'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 13872 KB Output is correct
2 Correct 6 ms 12592 KB Output is correct
3 Incorrect 72 ms 22648 KB 1st lines differ - on the 1st token, expected: '21261825233649', found: '369591758422'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1040 ms 21300 KB Time limit exceeded
2 Halted 0 ms 0 KB -