제출 #920307

#제출 시각아이디문제언어결과실행 시간메모리
920307alexander707070Building 4 (JOI20_building4)C++14
11 / 100
27 ms2384 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; const int inf=1e9; int n,a[MAXN],b[MAXN],cnt,p[MAXN]; int dp[MAXN][2],dp2[MAXN][2]; bool li[MAXN][2],li2[MAXN][2]; string sol,sol2; int ff(int pos,int last){ if(pos==n+1)return 0; if(li[pos][last])return dp[pos][last]; li[pos][last]=true; dp[pos][last]=-inf; int x=0; if(last==0)x=a[pos-1]; else x=b[pos-1]; if(a[pos]>=x){ dp[pos][last]=max(dp[pos][last],ff(pos+1,0)+1); } if(b[pos]>=x){ dp[pos][last]=max(dp[pos][last],ff(pos+1,1)); } return dp[pos][last]; } int ff2(int pos,int last){ if(pos==n+1)return 0; if(li2[pos][last])return dp2[pos][last]; li2[pos][last]=true; dp2[pos][last]=-inf; int x=0; if(last==0)x=a[pos-1]; else x=b[pos-1]; if(a[pos]>=x){ dp2[pos][last]=max(dp2[pos][last],ff2(pos+1,0)); } if(b[pos]>=x){ dp2[pos][last]=max(dp2[pos][last],ff2(pos+1,1)+1); } return dp2[pos][last]; } void solve(int pos,int last){ if(pos==n+1)return; int x; if(last==0)x=a[pos-1]; else x=b[pos-1]; if(a[pos]>=x and ff(pos,last)==ff(pos+1,0)+1){ sol+="A"; solve(pos+1,0); return; }else{ sol+="B"; solve(pos+1,1); return; } } void solve2(int pos,int last){ if(pos==n+1)return; int x; if(last==0)x=a[pos-1]; else x=b[pos-1]; if(b[pos]>=x and ff2(pos,last)==ff2(pos+1,1)+1){ sol2+="B"; solve2(pos+1,1); return; }else{ sol2+="A"; solve2(pos+1,0); return; } } int main(){ cin>>n; n*=2; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; } if(ff(1,0)<0 or ff(1,0)<n/2 or ff2(1,0)<n/2){ cout<<"-1\n"; return 0; } cnt=ff(1,0); solve(1,0); solve2(1,0); for(int i=0;i<sol.size();i++){ if(sol[i]=='A')p[i+1]=a[i+1]; else p[i+1]=b[i+1]; } p[n+1]=inf; while(cnt>n/2){ for(int i=0;i<sol.size();i++){ if(sol[i]=='A' and sol2[i]=='B' and b[i+1]>=p[i] and b[i+1]<=p[i+2]){ sol[i]='B'; p[i+1]=b[i+1]; break; } } cnt--; } cout<<sol<<"\n"; return 0; }

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

building4.cpp: In function 'int main()':
building4.cpp:103:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |  for(int i=0;i<sol.size();i++){
      |              ~^~~~~~~~~~~
building4.cpp:111:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |   for(int i=0;i<sol.size();i++){
      |               ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...