QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#528438 | #5537. Storing Eggs | Vermeil | WA | 152ms | 8440kb | C++20 | 3.3kb | 2024-08-23 14:10:19 | 2024-08-23 14:10:19 |
Judging History
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
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3948kb
input:
5 2 #.... ..... ....#
output:
4.472135954
result:
ok found '4.4721360', expected '4.4721360', error '0.0000000'
Test #2:
score: 0
Accepted
time: 1ms
memory: 6248kb
input:
5 6 ##.## ##### .....
output:
1.000000000
result:
ok found '1.0000000', expected '1.0000000', error '0.0000000'
Test #3:
score: 0
Accepted
time: 1ms
memory: 3872kb
input:
3 4 ..# ... ...
output:
1.414213562
result:
ok found '1.4142136', expected '1.4142140', error '0.0000003'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3496kb
input:
2 6 .. .# ..
output:
-1
result:
ok found '-1.0000000', expected '-1.0000000', error '-0.0000000'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3844kb
input:
1 2 . . .
output:
2.000000000
result:
ok found '2.0000000', expected '2.0000000', error '0.0000000'
Test #6:
score: 0
Accepted
time: 5ms
memory: 6244kb
input:
100 2 .................................................................................................... .................................................................................................... ...............................................................................................
output:
99.020199959
result:
ok found '99.0202000', expected '99.0202000', error '0.0000000'
Test #7:
score: 0
Accepted
time: 3ms
memory: 6768kb
input:
100 3 .................................................................................................... .................................................................................................... ...............................................................................................
output:
49.040799340
result:
ok found '49.0407993', expected '49.0407990', error '0.0000000'
Test #8:
score: -100
Wrong Answer
time: 152ms
memory: 8440kb
input:
100 100 .................................................................................................... .................................................................................................... .............................................................................................
output:
2.236067977
result:
wrong answer 1st numbers differ - expected: '2.0000000', found: '2.2360680', error = '0.1180340'