제출 #1321974

#제출 시각아이디문제언어결과실행 시간메모리
1321974HoriaHaivasSprinklers (CEOI24_sprinklers)C++20
9 / 100
2095 ms6776 KiB
#include<bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " #pragma GCC optimize("Ofast") #define int long long using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int range_rng(int l, int r) { return uniform_int_distribution<int>(l,r)(rng); } int s[100005]; int f[100005]; int dir[100005]; int last1[100005]; int last2[100005]; vector<int> ls,rs; string bigmeeks; int dp[100005]; int n,m; bool ok(int k) { int i,r,pas,bound,last,j,furthest1,closest1,l; bool oke; string config; dp[0]=0; last1[0]=0; last2[0]=0; for (i=1; i<=n; i++) { dp[i]=-1e18; ///L r=last1[i-1]; while (r+1<=m && f[r+1]<s[i]-k) r++; last1[i]=r; if (r<=dp[i-1]) { r=last2[i-1]; while (r+1<=m && f[r+1]<=s[i]) r++; last2[i]=r; if (r>dp[i]) { dp[i]=r; dir[i]=1; } } ///R r=0; pas=(1<<16); while (pas) { if (r+pas<=m && f[r+pas]<s[i]) r+=pas; pas=pas/2; } if (r<=dp[i-1]) { r=0; pas=(1<<16); while (pas) { if (r+pas<=m && f[r+pas]<=s[i]+k) r+=pas; pas=pas/2; } if (r>dp[i]) { dp[i]=r; dir[i]=2; } } ///RL if (i>=2) { r=0; pas=(1<<16); while (pas) { if (r+pas<=m && f[r+pas]<s[i]-k) r+=pas; pas=pas/2; } if (r<=dp[i-2]) { r=0; pas=(1<<16); while (pas) { if (r+pas<=m && f[r+pas]<=s[i-1]+k) r+=pas; pas=pas/2; } if (r>dp[i]) { dp[i]=r; dir[i]=3; } } } if (dp[i]==-1e18) return 0; } if (dp[n]!=m) return 0; config=""; j=n; while (j!=0) { if (dir[j]==1) { config+='L'; j--; } else if (dir[j]==2) { config+='R'; j--; } else if (dir[i]==3) { config+="LR"; j-=2; } } config+="$"; reverse(config.begin(),config.end()); ls.clear(); rs.clear(); for (i=1; i<=n; i++) { if (config[i]=='L') ls.push_back(s[i]); else rs.push_back(s[i]); } oke=true; for (i=1; i<=m; i++) { r=-1; pas=(1<<16); while (pas) { if (r+pas<rs.size() && rs[r+pas]<=f[i]) r+=pas; pas=pas/2; } if (r==-1 || rs[r]+k<f[i]) { r=-1; pas=(1<<16); while (pas) { if (r+pas<ls.size() && ls[r+pas]<f[i]) r+=pas; pas=pas/2; } r++; if (r>=ls.size() || ls[r]>f[i] && ls[r]-k>f[i] || ls[r]<f[i]) oke=false; } } if (oke) bigmeeks=config; return oke; } signed main() { /* ifstream fin("arbore.in"); ofstream fout("arbore.out"); */ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int i,j,cnt,r,pas; cin >> n >> m; for (i=1; i<=n; i++) cin >> s[i]; for (i=1; i<=m; i++) cin >> f[i]; if (!ok(1e9)) { cout << "-1"; } else { r=0; pas=(1<<30); while(pas) { if (!ok(r+pas)) r+=pas; pas=pas/2; } if (!ok(r)) r++; ok(r);///stiu ca e cringe da na cout << r << "\n"; for (i=1; i<=n; i++) cout << bigmeeks[i]; } return 0; }
#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...