제출 #598400

#제출 시각아이디문제언어결과실행 시간메모리
598400jk410건물 4 (JOI20_building4)C++17
11 / 100
208 ms254436 KiB
#include <bits/stdc++.h> #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; const int INF=1e9; int N; int A[4001],B[4001]; int DP[4001][4001][2]; string Ans; int dp(int i,int j,int k){ if (j<0) return 0; if (!i) return (!j); int &ret=DP[i][j][k]; if (ret!=-1) return ret; if (k) return ret=(A[i-1]<=B[i]&&dp(i-1,j,0)||B[i-1]<=B[i]&&dp(i-1,j,1)); return ret=(A[i-1]<=A[i]&&dp(i-1,j-1,0)||B[i-1]<=A[i]&&dp(i-1,j-1,1)); } void solve(int i,int j,int k){ if (!i) return; if (k){ Ans+='B'; if (A[i-1]<=B[i]&&dp(i-1,j,0)) solve(i-1,j,0); else solve(i-1,j,1); } else{ Ans+='A'; if (A[i-1]<=A[i]&&dp(i-1,j-1,0)) solve(i-1,j-1,0); else solve(i-1,j-1,1); } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); memset(DP,-1,sizeof(DP)); cin>>N; for (int i=1; i<=2*N; i++) cin>>A[i]; for (int i=1; i<=2*N; i++) cin>>B[i]; if (dp(2*N,N,0)){ solve(2*N,N,0); reverse(all(Ans)); cout<<Ans; return 0; } if (dp(2*N,N,1)){ solve(2*N,N,1); reverse(all(Ans)); cout<<Ans; return 0; } cout<<"-1"; return 0; }

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

building4.cpp: In function 'int dp(int, int, int)':
building4.cpp:19:33: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   19 |         return ret=(A[i-1]<=B[i]&&dp(i-1,j,0)||B[i-1]<=B[i]&&dp(i-1,j,1));
      |                     ~~~~~~~~~~~~^~~~~~~~~~~~~
building4.cpp:20:29: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   20 |     return ret=(A[i-1]<=A[i]&&dp(i-1,j-1,0)||B[i-1]<=A[i]&&dp(i-1,j-1,1));
      |                 ~~~~~~~~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...