Submission #1337749

#TimeUsernameProblemLanguageResultExecution timeMemory
1337749alexddFortune Telling 3 (JOI25_fortune3)C++20
49 / 100
299 ms824 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
void Anna(int N)
{
    int prec = -1;
    int curpoz = 0, cnt1 = 0, cnt0 = 0;
    int endgame = 0, puse1 = 0, puse0 = 0;
    for(int pas=1;pas<=N;pas++)
    {
        int val = DrawCard(prec);
        prec = -1;

        if(pas >= N - 10 + 1)//endgame
        {
            if(pas == N - 10 + 1)
            {
                if(cnt0 >= 10 && cnt1 >= 10)
                {
                    endgame = 1;
                }
                else if(cnt0 < 10)
                {
                    assert(cnt1 >= 10);
                    endgame = 2;
                }
                else if(cnt1 < 10)
                {
                    assert(cnt0 >= 10);
                    endgame = 3;
                }
                else
                    assert(0);
            }

            if(endgame == 1)
            {
                int b = pas - (N - 10 + 1);
                if(val == 1)
                {
                    if((1<<b)&cnt1)
                    {
                        prec = puse1 + b + 1;
                    }
                    else
                    {
                        prec = 0;
                    }
                    puse1++;
                }
                else
                {
                    if((1<<b)&cnt1)
                    {
                        prec = (puse1 + 10) + puse0 + b + 1;
                    }
                    else
                    {
                        prec = puse1 + 10;
                    }
                    puse0++;
                }
            }
            else if(endgame == 2)
            {
                if(val == 1)
                    prec = curpoz;
            }
            else if(endgame == 3)
            {
                if(val == 0)
                    prec = 0;
            }
        }
        else
        {
            if(val == 1)
            {
                cnt1++;
                if(cnt1 <= 10)
                    prec = curpoz;
            }
            else
            {
                cnt0++;
                if(cnt0 <= 10)
                    prec = 0;
            }
        }

        if(prec != -1)
            curpoz++;
    }
    DrawCard(prec);
}
#include "Bruno.h"

#include <bits/stdc++.h>
using namespace std;

int Bruno(int N, int L, std::vector<int> C)
{
    //for(int i=0;i<L;i++) cout<<C[i]<<" "; cout<<"\n";

    if(L < 30)//special endgame
    {
        int cnt0 = 0, cnt1 = 0;
        for(int i=0;i<L;i++)
        {
            if(C[i] == 1)
                cnt1++;
            else
                cnt0++;
        }
        if(cnt0 < 10)
        {
            assert(cnt1 >= 10);
            int tot0 = cnt0 + (10 - (cnt1 - 10));
            return N - tot0;
        }
        else
        {
            assert(cnt0 >= 10);
            int tot1 = cnt1 + (10 - (cnt0 - 10));
            return tot1;
        }
    }
    else
    {
        vector<int> isfixed(L+2, -1);
        int aux = 0;
        for(int i=0;i<L;i++)
        {
            if(C[i] == 0)
            {
                aux++;
                if(aux <= 10)
                    isfixed[i] = aux - 1;
            }
        }
        aux = 0;
        for(int i=L-1;i>=0;i--)
        {
            if(C[i] == 1)
            {
                aux++;
                if(aux <= 10)
                    isfixed[i] = 10 - aux;
            }
        }

        int mask = 0;
        for(int i=0;i+1<L;i++)
        {
            if(isfixed[i] != -1 && isfixed[i+1] == -1 && C[i] != C[i+1])
            {
                assert((mask & (1<<isfixed[i])) == 0);
                mask += (1<<(isfixed[i]));
            }
        }

        for(int i=0;i<L;i++)
            if(isfixed[i] == -1 && C[i] == 1)
                mask++;

        return mask;
    }
}

Compilation message (stderr)

# 1번째 컴파일 단계

grader_anna.cpp: In function 'int main()':
grader_anna.cpp:51:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |     scanf("%d %d", &Q, &stubN);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~

# 2번째 컴파일 단계

grader_bruno.cpp: In function 'int main()':
grader_bruno.cpp:8:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 |     scanf("%d %d", &Q, &N);
      |     ~~~~~^~~~~~~~~~~~~~~~~
grader_bruno.cpp:13:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |         scanf(" %d", &L);
      |         ~~~~~^~~~~~~~~~~
grader_bruno.cpp:16:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |             scanf(" %d", &C[i]);
      |             ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...