QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#528437 | #5537. Storing Eggs | Vermeil | Compile Error | / | / | C++17 | 3.3kb | 2024-08-23 14:10:03 | 2024-08-23 14:10:03 |
Judging History
This is the latest submission verdict.
- [2024-08-23 14:10:03]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-08-23 14:10:03]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
typedef long long ll;
using ld = long double;
const int NMAX = 1e5 + 5;
int n, k;
string inp[3];
int a[101];
bool dp[101][303][8];
bool pf[101][303][8];
ld dst[101][8][101][8];
ld sds[8];
ld self_dist(int bit){
if (sds[bit] != -1) return sds[bit];
vector<int> v;
for (int i=0;i<3;i++){
if (bit & (1 << i)) v.push_back(i);
}
if (v.size() <= 1) return sds[bit]=1e9;
if (v[0] + 1 == v[1]) return sds[bit]=1;
return sds[bit]=2;
}
ld Dist(int lx, int lbit, int rx, int rbit){
if (dst[lx][lbit][rx][rbit] > 0.01) return dst[lx][lbit][rx][rbit];
if (!lbit || !lx) return dst[lx][lbit][rx][rbit] = 1e9;
ld dx = lx - rx;
ld dy = 3;
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
if ((lbit & (1 << i)) && (rbit & (1 << j))){
dy = min(dy, (ld)abs(i - j));
}
}
}
return dst[lx][lbit][rx][rbit] = sqrt(dx * dx + dy * dy);
}
bool f(ld mid){
for (int i=0;i<=n;i++){
for (int j=0;j<=k;j++){
for (int b=0;b<8;b++){
dp[i][j][b] = pf[i][j][b] = false;
}
}
}
for (int i=0;i<=n;i++){
for (int m=0;m<8;m++) if (self_dist(m) >= mid) dp[i][0][m] = pf[i][0][m] = true;
}
for (int j=1;j<=k;j++){
for (int i=1;i<=n;i++){
for (int b=1;b<8;b++){
if ((a[i] & b) != b) continue;
int pb = popcount((unsigned int)b);
if (pb > j) continue;
if (self_dist(b) < mid) continue;
for (int c=0;c<8;c++){
if (self_dist(c) < mid) continue;
int lo = 0;
int hi = i - 1;
while (lo <= hi){
int md = (lo + hi) / 2;
if (Dist(md, c, i, b) >= mid) lo = md + 1;
else hi = md - 1;
}
hi = max(0, hi);
// cout<<lo<<" "<<c<<" "<<i<<" "<<b<<" "<<pc<<endl;
dp[i][j][b] |= pf[hi][j - pb][c];
}
}
for (int b=0;b<8;b++){
pf[i][j][b] = (pf[i - 1][j][b] | dp[i][j][b]);
}
}
}
bool yes = false;
for (int i=0;i<8;i++){
if (self_dist(i) >= mid) yes |= pf[n][k][i];
}
return yes;
}
int main() {
std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); cout.tie(0);
fill(sds,sds+8,-1);
int cnt=0;
cin>>n>>k;
cin>>inp[0]>>inp[1]>>inp[2];
for (int i=0;i<n;i++){
for (int j=0;j<3;j++){
if (inp[j][i] == '.'){
a[i + 1] |= (1 << j);
cnt++;
}
}
// cout<<a[i + 1]<<" ";
}
if (cnt<k){
cout<<-1; return 0;
}
// ld pp = 5.3851647862757;
// cout<<f(1);return 0;
ld lo = 0;
ld hi = 1e5;
while (lo + 1e-9 <= hi){
ld mid = (lo + hi) / 2;
if (f(mid)) lo = mid;
else hi = mid;
}
if (lo < 0.5){
cout<<"-1";
return 0;
}
cout<<fixed<<setprecision(9);
cout<<lo;
return 0;
}
Details
answer.code: In function ‘bool f(ld)’: answer.code:63:26: error: ‘popcount’ was not declared in this scope 63 | int pb = popcount((unsigned int)b); | ^~~~~~~~