제출 #1192324

#제출 시각아이디문제언어결과실행 시간메모리
1192324simona1230Paint By Numbers (IOI16_paint)C++20
0 / 100
0 ms580 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;


int p[200001],in[200001];
int dp[5001][5001][2];
int p2[200001],in2[200001];
int dp2[5001][5001][2];
int b[200001];
int w[200001];
string solve_puzzle(string s, vector<int> c)
{
    in[0]=1;
    p[0]=c[0];
    in[c[0]]=1;
    for(int i=1;i<c.size();i++)
        p[i]=p[i-1]+c[i],in[p[i]]=1;

    in2[0]=1;
    p2[c.size()-1]=c[c.size()-1];
    in2[c[c.size()-1]]=1;
    for(int i=c.size()-2;i>=0;i--)
        p2[i]=p2[i+1]+c[i],in2[p2[i]]=1;

    for(int i=0;i<s.size();i++)
    {
        for(int j=0;j<=i+1;j++)
        {
            if(in[j]&&(s[i]=='_'||s[i]=='.'))
            {
                //cout<<"in"<<endl;
                if(i==0)dp[i][j][0]=1;
                else dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);
            }

            if(j&&(s[i]=='X'||s[i]=='.'))
            {
                if(in[j-1])
                {
                    if(i==0)dp[i][j][1]=1;
                    else dp[i][j][1]=dp[i-1][j-1][0];
                }
                else
                {
                    dp[i][j][1]=dp[i-1][j-1][1];
                }
            }

        }
    }

    for(int i=s.size()-1;i>=0;i--)
    {
        for(int j=0;j<=s.size()-i;j++)
        {
            if(in2[j]&&(s[i]=='_'||s[i]=='.'))
            {
                if(i==s.size()-1)dp2[i][j][0]=1;
                else dp2[i][j][0]=max(dp2[i+1][j][0],dp2[i+1][j][1]);
            }

            if(j&&(s[i]=='X'||s[i]=='.'))
            {
                if(in2[j-1])
                {
                    if(i==s.size()-1)dp2[i][j][1]=1;
                    else dp2[i][j][1]=dp2[i+1][j-1][0];
                }
                else
                {
                    dp2[i][j][1]=dp2[i+1][j-1][1];
                }
            }
            //cout<<i<<" "<<j<<" - "<<dp2[i][j][0]<<" "<<dp2[i][j][1]<<endl;
        }
    }

    for(int i=0;i<s.size();i++)
    {
        for(int j=0;j<c.size();j++)
        {
            for(int l=1;l<=c[j];l++)
            {
                int h=0;
                if(j)h=p[j-1];
                h+=l;

                int h2=0;
                if(j!=c.size()-1)h2=p2[j+1];
                h2+=(c[j]-l+1);

                if(dp[i][h][1]&&dp2[i][h2][1])b[i]=1;
            }

            if(dp[i][p[j]][0]&&(j==c.size()-1||dp2[i][p2[j+1]][0]))w[i]=1;
        }

        if(dp2[i][p2[0]][0])w[i]=1;
    }

    string ans="";
    for(int i=0;i<s.size();i++)
    {
        //cout<<i<<" "<<w[i]<<" "<<b[i]<<endl;
        if(w[i]&&b[i])ans+='?';
        else if(w[i])ans+='_';
        else ans+='X';
    }

    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
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...