제출 #1063361

#제출 시각아이디문제언어결과실행 시간메모리
1063361I_FloPPed21Toll (BOI17_toll)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; int dp[50005][17][5][5],n,k,m,q,temp[10][10],ans[10][10]; void combine(int target[5][5],int a[5][5],int b[5][5]) { for(int x=0; x<k; x++) for(int y=0; y<k; y++) { for(int z=0; z<k; z++) { target[x][y]=min(target[x][y],a[x][z]+b[z][y]); } } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>k>>n>>m>>q; for(int i=0; i<n; i++) { for(int j=0; j<17; j++) for(int x=0; x<k; x++) for(int y=0; y<k; y++) dp[i][j][x][y] =5e8+1; } for(int i=0; i <= m; i++) { int a,b,c; cin>>a>>b>>c; dp[a/k][0][a%k][b%k]=c; } for(int i=1; i<17; i++) { for(int j=0; j+(1<<i)<(n+k-1)/k; j++) { combine(dp[j][i],dp[j][i-1],dp[j+(1<<i-1)][i-1]); } } while(q--) { int a,b; cin>>a>>b; int curent=a/k; int dest=b/k; for(int i=0; i<k; i++) for(int j=0; j<k; j++) { ans[i][j] =5e8+1; temp[i][j] =5e8+1; } for(int i = 0 ; i <5; i++) ans[i][i] =0; for(int i =16; i>=0; i--) { if(curent+(1<<i) >dest) continue; combine(temp,ans,dp[curent][i]); for(int t=0; t<k; t++) for(int j=0; j<k; j++) { ans[t][j]=temp[t][j]; temp[t][j] =5e8+1; } curent+=(1<<i); } if(ans[a%k][b%k]==5e8+1) cout<<-1<<'\n'; else cout<<ans[a%k][b%k]<<'\n'; } return 0; }

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

toll.cpp: In function 'int main()':
toll.cpp:39:51: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   39 |             combine(dp[j][i],dp[j][i-1],dp[j+(1<<i-1)][i-1]);
      |                                                  ~^~
toll.cpp:61:21: error: cannot convert 'int (*)[10]' to 'int (*)[5]'
   61 |             combine(temp,ans,dp[curent][i]);
      |                     ^~~~
      |                     |
      |                     int (*)[10]
toll.cpp:4:18: note:   initializing argument 1 of 'void combine(int (*)[5], int (*)[5], int (*)[5])'
    4 | void combine(int target[5][5],int a[5][5],int b[5][5])
      |              ~~~~^~~~~~~~~~~~