제출 #1276397

#제출 시각아이디문제언어결과실행 시간메모리
1276397k12_khoiPaint By Numbers (IOI16_paint)C++17
컴파일 에러
0 ms0 KiB
#include "paint.h"

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

const int N=1e5+5;

int n,k,c[N],sz[N];
bool f[N],g[N];
string s;

string solve_puzzle(string s,int c[])
{
    string ans=s;
    int k;

    for (int i=0;i<=1000;i++)
    if (c[i]==0)
    {
        k=i;
        break;
    }
    int n=s.size();

    string t=s;

    function <void(int)> ql = [&] (int i) -> void
    {
        if (i==n)
        {
            int cur=0;

            for (int i=0;i<n;i++)
            sz[i]=0;

            for (int i=0;i<n;i++)
            {
                if (t[i]=='_')
                {
                    if (sz[cur]) cur++;
                }
                else sz[cur]++;
            }

            if (sz[cur]) cur++;


            if (cur==k)
            {
                for (int i=0;i<k;i++)
                if (c[i]!=sz[i]) return;

                for (int i=0;i<n;i++)
                if (t[i]=='X') f[i]=true;
                else g[i]=true;
            }

            return;
        }


        if (s[i]=='.')
        {
            t[i]='X';
            ql(i+1);
            t[i]='_';
            ql(i+1);
        }
        else ql(i+1);
    };

    ql(0);


    for (int i=0;i<n;i++)
    if (ans[i]=='.')
    {
        if (f[i] and g[i]) ans[i]='?';
        else if (f[i]) ans[i]='X';
        else ans[i]='_';
    }

//    auto sub4 = [&] ()
//    {
//        int cur;
//
//        pre_W[0]=0;
//        for (int i=1;i<=n;i++)
//        pre_W[i]=pre_W[i-1]+(s[i-1]=='_');
//
//        pre[0]=0;
//        for (int i=1;i<=n;i++)
//        {
//            cur=pre[i-1];
//            if (cur<k and i>=c[cur] and pre[i-c[cur]]==cur and pre_W[i]-(i-c[cur]>0 ? pre_W[i-c[cur]-1] : 0)==0)
//            {
//                cur++;
//                f[i-cur]++;
//                f[i+1]--;
//            }
//
//            pre[i]=cur;
//        }
//
//
//        suf[n+1]=k-1;
//        for (int i=n;i>=1;i--)
//        {
//            cur=suf[i+1];
//            if (cur>=0 and i+c[cur]<=n and suf[i+c[cur]]==cur and pre_W[i+c[cur]]-pre[i-1]==0) cur--;
//
//            suf[i]=cur;
//        }
//
//        for (int i=1;i<=n;i++)
//        {
//            if (pre[i]<k and pos[pre[i]]==0) pos[pre[i]]=i;
//            if (suf[i]>=0) last[suf[i]]=i;
//        }
//
//        for (int i=0;i<k;i++)
//
//
//
//        return ans;
//    }

    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
/usr/bin/ld: /tmp/cc0jcNtD.o: in function `main':
grader.cpp:(.text.startup+0x1ee): 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