Submission #1332178

#TimeUsernameProblemLanguageResultExecution timeMemory
1332178activedeltorrePaint By Numbers (IOI16_paint)C++20
Compilation error
0 ms0 KiB
#include "paint.h"
#include <iostream>
#include <string>
#include <string.h>
#include <vector>
#include <cstdlib>
#define int long long
using namespace std;
int mod=998244353;
int dpst[200005][105][2];
int dpdr[200005][105][2];
int v[200005];
int vec[1005];
int spar[200005][2];
std::string solve_puzzle(std::string s, std::vector<int> c) {
    int n=s.size();
    int k=c.size();
    for(int i=1;i<=n;i++)
    {
        v[i]=s[i-1];
        spar[i][0]=spar[i-1][0];
        spar[i][1]=spar[i-1][1];
        if(v[i]==88)
        {
            spar[i][1]++;
        }
        if(v[i]==95)
        {
            spar[i][0]++;
        }
    }
    for(int i=1;i<=k;i++)
    {
        vec[i]=c[i-1];
    }
    dpst[0][0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=k;j++)
        {
            int dr=i+vec[j+1]-1;
            if(v[i]!=95 && dr<=n && j<k)
            {
               if(spar[dr][0]-spar[i-1][0]==0)
               {
                    dpst[dr][j+1][1]=(dpst[dr][j+1][1]+dpst[i-1][j][0])%mod;
               }
            }
            if(v[i]!=88)
            {
                dpst[i][j][0]=(dpst[i][j][0]+dpst[i-1][j][0]+dpst[i-1][j][1])%mod;
            }
        }
    }
    dpdr[n+1][k][0]=1;
    for(int i=n;i>=1;i--)
    {
        for(int j=k;j>=0;j--)
        {
            int st=i-vec[j]+1;
            if(v[i]!=95 && st>=1 && j>=1)
            {
               if(spar[i][0]-spar[st-1][0]==0)
               {
                    dpdr[st][j-1][1]=(dpdr[st][j-1][1]+dpdr[i+1][j][0])%mod;
               }
            }
            if(v[i]!=88)
            {
                dpdr[i][j][0]=(dpdr[i][j][0]+dpdr[i+1][j][0]+dpdr[i+1][j][1])%mod;
            }
        }
    }
    int fin=(dpst[n][k][0]+dpst[n][k][1])%mod;
    string rez;
    for(int i=1;i<=n;i++)
    {
        if(v[i]==88)
        {
            rez.push_back('X');
        }
        else if(v[i]==95)
        {
            rez.push_back('_');
        }
        else
        {
            int tot=0;
            for(int j=0;j<=k;j++)
            {
                tot=tot+(dpst[i-1][j][0]+dpst[i-1][j][1])*(dpdr[i+1][j][0]+dpdr[i+1][j][1])%mod;
            }
            if(tot==0)
            {
                rez.push_back('X');
            }
            else if(tot==fin)
            {
                rez.push_back('_');
            }
            else
            {
                rez.push_back('?');
            }
        }
    }
    return rez;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccAiiL19.o: in function `main':
grader.cpp:(.text.startup+0x20b): undefined reference to `solve_puzzle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status