QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#174923#5537. Storing EggsLittleCubeWA 2ms3864kbC++142.6kb2023-09-10 14:43:152023-09-10 14:43:16

Judging History

This is the latest submission verdict.

  • [2023-09-10 14:43:16]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 3864kb
  • [2023-09-10 14:43:15]
  • Submitted

answer

#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define F first
#define S second
using namespace std;

int N, K, dp[105][4][4][4];
string s[3];
vector<int> masks[5] = {{},
                        {1, 2, 3, 4, 5, 6, 7},
                        {1, 2, 4, 5},
                        {1, 2, 4, 5},
                        {1, 2, 4}};

void chmax(int &a, int b)
{
    a = max(a, b);
}

int check(int d)
{
    int res = 0;
    for (int i = 1; i <= N; i++)
        for (int a : {0, 1, 2, 3})
            for (int b : {0, 1, 2, 3})
                for (int c : {0, 1, 2, 3})
                    dp[i][a][b][c] = 0;

    for (int i = 1; i <= N; i++)
        for (int mask : masks[min(4, d)])
            for (int j = 0; j < i; j++)
            {
                bitset<3> t = mask;
                if (!j)
                    chmax(dp[i][t[0] ? 0 : 3][t[1] ? 0 : 3][t[2] ? 0 : 3], __builtin_popcount(mask));

                for (int a : {0, 1, 2, 3})
                    for (int b : {0, 1, 2, 3})
                        for (int c : {0, 1, 2, 3})
                        {
                            vector<pii> u = {pii(0, j - a), pii(1, j - b), pii(2, j - c)};
                            bool flag = 1;
                            for (int k = 0; k < 3; k++)
                                if (t[k])
                                {
                                    if (s[k][i - 1] == '#')
                                        flag = 0;
                                    for (auto [x, y] : u)
                                        if ((x - k) * (x - k) + (y - i) * (y - i) < d)
                                            flag = 0;
                                }
                            if (flag)
                                chmax(dp[i][t[0] ? 0 : min(3, a + i - j)][t[1] ? 0 : min(3, b + i - j)][t[2] ? 0 : min(3, c + i - j)], dp[j][a][b][c] + __builtin_popcount(mask));
                        }
            }
    for (int i = 1; i <= N; i++)
        for (int a : {0, 1, 2, 3})
            for (int b : {0, 1, 2, 3})
                for (int c : {0, 1, 2, 3})
                    res = max(res, dp[i][a][b][c]);
    return res;
}

signed main()
{
    cin >> N >> K;
    for (int i = 0; i < 3; i++)
        cin >> s[i];
    int l = 0, r = 100 * 100 + 4;
    while (l < r)
    {
        int mid = (l + r + 1) / 2;
        if (check(mid) >= K)
            l = mid;
        else
            r = mid - 1;
    }
    if (r == 0)
        cout << -1 << '\n';
    else
        cout << fixed << setprecision(10) << sqrtl(l) << '\n';
}

詳細信息

Test #1:

score: 100
Accepted
time: 2ms
memory: 3824kb

input:

5 2
#....
.....
....#

output:

4.4721359550

result:

ok found '4.4721360', expected '4.4721360', error '0.0000000'

Test #2:

score: 0
Accepted
time: 2ms
memory: 3864kb

input:

5 6
##.##
#####
.....

output:

1.0000000000

result:

ok found '1.0000000', expected '1.0000000', error '0.0000000'

Test #3:

score: 0
Accepted
time: 1ms
memory: 3812kb

input:

3 4
..#
...
...

output:

1.4142135624

result:

ok found '1.4142136', expected '1.4142140', error '0.0000003'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3504kb

input:

2 6
..
.#
..

output:

-1

result:

ok found '-1.0000000', expected '-1.0000000', error '-0.0000000'

Test #5:

score: -100
Wrong Answer
time: 1ms
memory: 3804kb

input:

1 2
.
.
.

output:

1.7320508076

result:

wrong answer 1st numbers differ - expected: '2.0000000', found: '1.7320508', error = '0.1339746'