제출 #1173045

#제출 시각아이디문제언어결과실행 시간메모리
1173045SpyrosAliv송신탑 (IOI22_towers)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll max_weights(int n, int m, vector<int> X, vector<int> Y, vector<int> W) {
    ll tot = 0;
    bool sub1 = true;
    bool sub2 = true;
    ll s1 = 0, s2 = 0;
    for (int i = 0; i < m; i++) {
        if (X[i] % 2) sub1 = false;
        tot += W[i];
        if (X[i] > 1) sub2 = false;
        if (X[i] == 0) s1 += W[i];
        else s2 += W[i];
    }
    if (sub1) return tot;
    if (sub2) return max(s1, s2);
    /*
    vector<vector<int>> grid(n+1, vector<int>(n+1, 0));
    for (int i = 0; i < m; i++) {
        grid[Y[i]][X[i]] += W[i];
        tot += W[i];
    }
    vector<vector<vector<vector<int>>>> dp(n+1, vector<vector<vector<int>>>(9, vector<vector<int>>(9, vector<int>(9, 0))));
    vector<vector<vector<int>>> act(n+1, vector<vector<int>>(9, vector<int>(9, 0)));
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < n; j++) {
            grid[i][j] += grid[i-1][j];
        }
    }
    int ans = 0;
    for (int i = 1; i < n-1; i++) {
        for (int cov = 0; cov <= n; cov++) {
            for (int left = 0; left <= n; left++) {
                for (int right = 0; right <= n; right++) {
                    int bon = 0;
                    if (max(left, right) > cov) {
                        bon = grid[max(left, right)][i];
                        if (cov > 0) bon -= grid[cov - 1][i];
                    }
                    dp[i][left][cov][right] = max(dp[i][left][cov][right], act[i - 1][left][cov] + bon);
                    act[i][cov][right] = max(act[i][cov][right], dp[i][left][cov][right]);
                    ans = max(ans, dp[i][left][cov][right]);
                }
            }
        }
    }
    return ans;
    for (int col = 1; col < n; col++) {
        for (int cov = 0; cov <= n; cov++) {
            for (int prev = 0; prev <= n; prev++) {
                int extra = 0;
                if (cov > prev) {
                    extra = grid[cov - 1][col - 1];
                    if (prev > 0) extra -= grid[prev - 1][col - 1];
                }
                else if (prev > cov) {
                    extra = grid[prev - 1][col];
                    if (cov > 0) extra -= grid[cov - 1][col];
                }
                dp[col][cov] = max(dp[col][cov], dp[col - 1][prev] + extra);
                ans = max(ans, dp[col][cov]);
            }
        }
    }
    return ans;*/
}
/*
int main() {
    cout << max_weights(5, 4, {0, 1, 4, 3}, {2, 1, 4, 3}, {5, 2, 1, 3}) << "\n";
}*/

컴파일 시 표준 에러 (stderr) 메시지

towers.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
towers.cpp:68:1: warning: control reaches end of non-void function [-Wreturn-type]
   68 | }
      | ^
/usr/bin/ld: /tmp/ccrhxdOo.o: in function `main':
stub.cpp:(.text.startup+0x15f): undefined reference to `init(int, std::vector<int, std::allocator<int> >)'
/usr/bin/ld: stub.cpp:(.text.startup+0x1ad): undefined reference to `max_towers(int, int, int)'
collect2: error: ld returned 1 exit status