답안 #75201

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
75201 2018-09-08T16:51:09 Z bogdan10bos Snake Escaping (JOI18_snake_escaping) C++14
22 / 100
619 ms 66560 KB
#include <bits/stdc++.h>

using namespace std;

//#define FILE_IO

int N, Q, ans;
int i, j, q, msk;
int cnt[3];
int val[1100005], dp[1100005], dp2[1100005];
int bts[1100005];
int B, b[25];
char s[1100005];

void bck0(int pas, int msk, int smn)
{
    if(pas >= B)
    {
        ans += smn * dp[msk];
        return;
    }

    bck0(pas + 1, msk, smn);
    bck0(pas + 1, msk ^ (1 << b[pas]), -smn);
}

void bck1(int pas, int msk, int smn)
{
    if(pas >= B)
    {
        ans += smn * dp2[msk];
        return;
    }

    bck1(pas + 1, msk, smn);
    bck1(pas + 1, msk ^ (1 << b[pas]), -smn);
}

void bckq(int pas, int msk)
{
    if(pas >= B)
    {
        ans += val[msk];
        return;
    }

    bckq(pas + 1, msk);
    bckq(pas + 1, msk ^ (1 << b[pas]));
}

int main()
{
    #ifdef FILE_IO
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    #endif

    scanf("%d%d\n", &N, &Q);
    scanf("%s\n", s);
    for(i = 0; i < (1 << N); i++)
        val[i] = dp[i] = dp2[i] = s[i] - '0';
    for(j = 0; j < N; j++)
        for(i = (1 << N) - 1; i >= 0; i--)
            if( (i & (1 << j)) == 0 )
                dp[i] += dp[i ^ (1 << j)];
    for(j = 0; j < N; j++)
        for(i = 0; i < (1 << N); i++)
            if( (i & (1 << j)) != 0 )
                dp2[i] += dp2[i ^ (1 << j)];

    for(q = 1; q <= Q; q++)
    {
        scanf("%s\n", s);
        reverse(s, s + N);
        cnt[0] = cnt[1] = cnt[2] = 0;
        for(j = 0; j < N; j++)
        {
            if(s[j] == '0') cnt[0]++;
            else if(s[j] == '1')    cnt[1]++;
            else if(s[j] == '?')    cnt[2]++;
        }

        if(cnt[0] < cnt[1] && cnt[0] < cnt[2])
        {
            msk = 0;
            B = 0;
            for(i = 0; i < N; i++)
            {
                if(s[i] == '1') msk |= (1 << i);
                if(s[i] == '0') b[B++] = i;
            }

            ans = 0;
            bck0(0, msk, 1);
            printf("%d\n", ans);
        }
        else if(cnt[1] < cnt[2])
        {
            msk = 0;
            B = 0;
            for(i = 0; i < N; i++)
            {
                if(s[i] == '1')
                {
                    msk |= (1 << i);
                    b[B++] = i;
                }
                if(s[i] == '?')
                    msk |= (1 << i);
            }

            ans = 0;
            bck1(0, msk, 1);
            printf("%d\n", ans);
        }
        else
        {
            msk = 0;
            B = 0;
            for(i = 0; i < N; i++)
            {
                if(s[i] == '?') b[B++] = i;
                else    msk |= ((s[i] - '0') << i);
            }

            ans = 0;
            bckq(0, msk);
            printf("%d\n", ans);
        }
    }

    return 0;
}

Compilation message

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:58:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d\n", &N, &Q);
     ~~~~~^~~~~~~~~~~~~~~~~~
snake_escaping.cpp:59:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s\n", s);
     ~~~~~^~~~~~~~~~~
snake_escaping.cpp:73:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s\n", s);
         ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 520 KB Output is correct
3 Correct 3 ms 520 KB Output is correct
4 Correct 2 ms 548 KB Output is correct
5 Correct 3 ms 748 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 3 ms 776 KB Output is correct
8 Correct 3 ms 776 KB Output is correct
9 Correct 3 ms 776 KB Output is correct
10 Correct 2 ms 836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 520 KB Output is correct
3 Correct 3 ms 520 KB Output is correct
4 Correct 2 ms 548 KB Output is correct
5 Correct 3 ms 748 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 3 ms 776 KB Output is correct
8 Correct 3 ms 776 KB Output is correct
9 Correct 3 ms 776 KB Output is correct
10 Correct 2 ms 836 KB Output is correct
11 Correct 368 ms 15340 KB Output is correct
12 Correct 443 ms 18048 KB Output is correct
13 Correct 444 ms 18048 KB Output is correct
14 Correct 435 ms 18048 KB Output is correct
15 Correct 439 ms 18436 KB Output is correct
16 Correct 475 ms 18436 KB Output is correct
17 Correct 462 ms 18472 KB Output is correct
18 Correct 288 ms 20288 KB Output is correct
19 Correct 317 ms 20288 KB Output is correct
20 Correct 400 ms 20288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 520 KB Output is correct
3 Correct 3 ms 520 KB Output is correct
4 Correct 2 ms 548 KB Output is correct
5 Correct 3 ms 748 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 3 ms 776 KB Output is correct
8 Correct 3 ms 776 KB Output is correct
9 Correct 3 ms 776 KB Output is correct
10 Correct 2 ms 836 KB Output is correct
11 Correct 368 ms 15340 KB Output is correct
12 Correct 443 ms 18048 KB Output is correct
13 Correct 444 ms 18048 KB Output is correct
14 Correct 435 ms 18048 KB Output is correct
15 Correct 439 ms 18436 KB Output is correct
16 Correct 475 ms 18436 KB Output is correct
17 Correct 462 ms 18472 KB Output is correct
18 Correct 288 ms 20288 KB Output is correct
19 Correct 317 ms 20288 KB Output is correct
20 Correct 400 ms 20288 KB Output is correct
21 Correct 468 ms 20288 KB Output is correct
22 Correct 510 ms 20288 KB Output is correct
23 Correct 554 ms 20288 KB Output is correct
24 Correct 575 ms 20288 KB Output is correct
25 Correct 519 ms 20964 KB Output is correct
26 Correct 605 ms 20964 KB Output is correct
27 Correct 582 ms 20964 KB Output is correct
28 Correct 320 ms 21824 KB Output is correct
29 Correct 399 ms 21824 KB Output is correct
30 Correct 505 ms 21824 KB Output is correct
31 Correct 558 ms 21824 KB Output is correct
32 Correct 619 ms 23616 KB Output is correct
33 Correct 477 ms 23616 KB Output is correct
34 Correct 577 ms 23616 KB Output is correct
35 Correct 577 ms 23616 KB Output is correct
36 Correct 317 ms 25020 KB Output is correct
37 Correct 484 ms 26960 KB Output is correct
38 Correct 419 ms 26960 KB Output is correct
39 Correct 530 ms 26960 KB Output is correct
40 Correct 559 ms 39760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 520 KB Output is correct
3 Correct 3 ms 520 KB Output is correct
4 Correct 2 ms 548 KB Output is correct
5 Correct 3 ms 748 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 3 ms 776 KB Output is correct
8 Correct 3 ms 776 KB Output is correct
9 Correct 3 ms 776 KB Output is correct
10 Correct 2 ms 836 KB Output is correct
11 Correct 104 ms 50304 KB Output is correct
12 Correct 104 ms 52352 KB Output is correct
13 Correct 114 ms 54404 KB Output is correct
14 Correct 139 ms 56352 KB Output is correct
15 Correct 104 ms 58508 KB Output is correct
16 Correct 138 ms 60432 KB Output is correct
17 Correct 130 ms 62484 KB Output is correct
18 Correct 117 ms 64800 KB Output is correct
19 Runtime error 101 ms 66560 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 520 KB Output is correct
3 Correct 3 ms 520 KB Output is correct
4 Correct 2 ms 548 KB Output is correct
5 Correct 3 ms 748 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 3 ms 776 KB Output is correct
8 Correct 3 ms 776 KB Output is correct
9 Correct 3 ms 776 KB Output is correct
10 Correct 2 ms 836 KB Output is correct
11 Correct 368 ms 15340 KB Output is correct
12 Correct 443 ms 18048 KB Output is correct
13 Correct 444 ms 18048 KB Output is correct
14 Correct 435 ms 18048 KB Output is correct
15 Correct 439 ms 18436 KB Output is correct
16 Correct 475 ms 18436 KB Output is correct
17 Correct 462 ms 18472 KB Output is correct
18 Correct 288 ms 20288 KB Output is correct
19 Correct 317 ms 20288 KB Output is correct
20 Correct 400 ms 20288 KB Output is correct
21 Correct 468 ms 20288 KB Output is correct
22 Correct 510 ms 20288 KB Output is correct
23 Correct 554 ms 20288 KB Output is correct
24 Correct 575 ms 20288 KB Output is correct
25 Correct 519 ms 20964 KB Output is correct
26 Correct 605 ms 20964 KB Output is correct
27 Correct 582 ms 20964 KB Output is correct
28 Correct 320 ms 21824 KB Output is correct
29 Correct 399 ms 21824 KB Output is correct
30 Correct 505 ms 21824 KB Output is correct
31 Correct 558 ms 21824 KB Output is correct
32 Correct 619 ms 23616 KB Output is correct
33 Correct 477 ms 23616 KB Output is correct
34 Correct 577 ms 23616 KB Output is correct
35 Correct 577 ms 23616 KB Output is correct
36 Correct 317 ms 25020 KB Output is correct
37 Correct 484 ms 26960 KB Output is correct
38 Correct 419 ms 26960 KB Output is correct
39 Correct 530 ms 26960 KB Output is correct
40 Correct 559 ms 39760 KB Output is correct
41 Correct 104 ms 50304 KB Output is correct
42 Correct 104 ms 52352 KB Output is correct
43 Correct 114 ms 54404 KB Output is correct
44 Correct 139 ms 56352 KB Output is correct
45 Correct 104 ms 58508 KB Output is correct
46 Correct 138 ms 60432 KB Output is correct
47 Correct 130 ms 62484 KB Output is correct
48 Correct 117 ms 64800 KB Output is correct
49 Runtime error 101 ms 66560 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
50 Halted 0 ms 0 KB -