Submission #1178657

#TimeUsernameProblemLanguageResultExecution timeMemory
1178657alexddSprinklers (CEOI24_sprinklers)C++20
20 / 100
2095 ms10704 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 4e9; int n,m; int s[100005],f[100005]; char dir[100005],sol[100005]; map<int,int> mp; int dp[100005],prec[100005]; bool bun[100005]; bool verif(int k) { dp[0] = -1; bun[0] = 1; for(int i=1;i<=n;i++) { int prima = -1, primak = -1; for(int j=m;j>=1;j--) { if(f[j] < s[i]) { prima = f[j]; break; } } for(int j=m;j>=1;j--) { if(f[j] < s[i] - k) { primak = f[j]; break; } } dp[i] = -1; bun[i] = 0; if(prima == -1) { dp[i] = s[i] + k; dir[i] = 'R'; bun[i] = 1; prec[i] = -1; } else { for(int j=i-1;j>0;j--) { if(bun[j] && dp[j] >= prima) { dp[i] = s[i] + k; bun[i] = 1; prec[i] = j; dir[i] = 'R'; break; } } } if(!bun[i]) { if(primak == -1) { bun[i] = 1; dp[i] = s[i]; prec[i] = -1; dir[i] = 'L'; } if(bun[i-1] && dp[i-1] >= primak) { bun[i] = 1; if(max(dp[i-1], s[i]) > dp[i]) { dp[i] = max(dp[i-1], s[i]); prec[i] = i-1; dir[i] = 'L'; } } for(int j=i-2;j>=0;j--) { if(bun[j] && dp[j] >= primak) { bun[i] = 1; if(s[i-1] + k > dp[i]) { dp[i] = s[i-1] + k; prec[i] = j; dir[i] = 'L'; } } } } } return (bun[n] && dp[n] >= f[m]); } signed main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>s[i]; mp[s[i]]++; } for(int i=1;i<=m;i++) { cin>>f[i]; if(mp[f[i]]) { i--; m--; } } if(!verif(INF)) { cout<<-1; return 0; } int st=0,dr=INF,ans=INF; while(st<=dr) { int mij=(st+dr)/2; if(verif(mij)) { ans = mij; dr = mij-1; } else st = mij+1; } verif(ans); int cur = n; while(cur>0) { if(dir[cur] == 'R') { sol[cur] = 'R'; for(int u=cur-1;u>prec[cur];u--) sol[u] = 'L'; } else { sol[cur] = 'L'; if(dp[cur] == s[cur-1] + ans) { sol[cur-1] = 'R'; for(int u=cur-2;u>prec[cur];u--) sol[u] = 'L'; } else { for(int u=cur-1;u>prec[cur];u--) sol[u] = 'L'; } } cur = prec[cur]; } cout<<ans<<"\n"; for(int i=1;i<=n;i++) cout<<sol[i]; return 0; } /** dp[i] = pozitia maxima cu care se pot extinde in dreapta primele i sprinklere daca toate florile <=i au fost acoperite */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...