답안 #716002

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
716002 2023-03-28T18:26:31 Z sandry24 Toll (BOI17_toll) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
 
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define pb push_back
#define mp make_pair
#define f first
#define s second

int k, n, m, o;
int ans[5][5], temp[5][5], dp[50000][17][5][5];

void combine(int t[5][5], int a[5][5], int b[5][5]){
    for(int i = 0; i < k; i++){
        for(int j = 0; j < k; j++){
            for(int l = 0; l < k; l++){
                t[i][j] = min(t[i][j], a[i][l] + b[l][j]);
            }
        }
    }
}
 
void solve(){
cin >> k >> n >> m >> o;

    memset(dp, 0x3f, sizeof dp);

    while (m--) {

        int a, b, t;

        cin >> a >> b >> t;

        dp[a / k][0][a % k][b % k] = t;

    }

    for (int j = 1; j < 17; j++) {

        for (int i = 0; i + (1 << j) < (n + k - 1) / k; i++) {

            combine(dp[i][j], dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]);

        }

    }


    while (o--) {

        int a, b;

        cin >> a >> b;

        memset(ans, 0x3f, sizeof ans);

        for (int i = 0; i < 5; i++) ans[i][i] = 0;

        for (int curr = a / k, dest = b / k, i = 16; ~i; i--) {

            if (curr + (1 << i) <= dest) {

                memset(tmp, 0x3f, sizeof tmp);

                combine(tmp, ans, dp[curr][i]);

                memcpy(ans, tmp, sizeof ans);

                curr += (1 << i);

            }

        }

        cout << (ans[a % k][b % k] == 0x3f3f3f3f ? -1 : ans[a % k][b % k])

             << '\n';

    }
}   

int main(){
    //freopen("infasuratoare.in", "r", stdin);
    //freopen("infasuratoare.out", "w", stdout);
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}

Compilation message

toll.cpp: In function 'void solve()':
toll.cpp:46:60: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   46 |             combine(dp[i][j], dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]);
      |                                                          ~~^~~
toll.cpp:67:24: error: 'tmp' was not declared in this scope; did you mean 'temp'?
   67 |                 memset(tmp, 0x3f, sizeof tmp);
      |                        ^~~
      |                        temp