제출 #205426

#제출 시각아이디문제언어결과실행 시간메모리
205426okoPaint By Numbers (IOI16_paint)C++14
90 / 100
2104 ms361656 KiB
#include "paint.h"
#include<bits/stdc++.h>
#include <vector>
#include <string>
#include <cstdio>
#include <cassert>
using namespace std;
string a;
vector<int>k;
int dp[200050][150][3],wt[200050],bk[200050];
int f(int x,int y,int cl)
{
    if(x==a.size()-1)
    {
        if(y==k.size())return 1;
        else return 0;
    }
    if(dp[x][y][cl]!=-1)return dp[x][y][cl];
    int ans=0,cnt=0;
    if(cl==0)
    {
        if(a[x+1]=='X'&&y!=k.size())ans=max(ans,f(x+1,y,1));
        if(a[x+1]=='_')ans=max(ans,f(x+1,y,0));
        if(a[x+1]=='.')
        {
            if(y!=k.size())ans=max(ans,f(x+1,y,1));
            ans=max(ans,f(x+1,y,0));
        }
        return dp[x][y][cl]=ans;
    }
    for(int i=x; i<a.size(); i++)
    {
        if(a[i]=='_')break;
        cnt++;
        if(cnt==k[y]&&a[i+1]!='X')ans=max(ans,f(i+1,y+1,0));
    }
    return dp[x][y][cl]=ans;
}
string solve_puzzle(string s,vector<int> c)
{
    memset(dp,-1,sizeof dp);
    a=s,k=c;
    a.push_back('_');
    if(a[0]!='X')f(0,0,0);
    if(a[0]!='_')f(0,0,1);
    for(int i=0; i<a.size(); i++)
    {
        for(int j=0; j<=k.size(); j++)
        {
            if(dp[i][j][0]==1)wt[i]=1;
            int kk=k[j]-1;
            for(int z=i;z>=0;z--)
            {
                if(a[z]=='_')break;
                if(i-kk<=z&&dp[z][j][1]==1)bk[i]=1;
            }
        }
    }
    string aa=a;
    for(int i=0;i<a.size();i++)
    {
        if(aa[i]!='.')continue;
        if(wt[i]+bk[i]==2)
        {
            aa[i]='?';
            continue;
        }
        if(wt[i])aa[i]='_';
        else aa[i]='X';
    }
    aa.erase(--aa.end());
    return aa;
}

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

paint.cpp: In function 'int f(int, int, int)':
paint.cpp:13:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(x==a.size()-1)
        ~^~~~~~~~~~~~
paint.cpp:15:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(y==k.size())return 1;
            ~^~~~~~~~~~
paint.cpp:22:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(a[x+1]=='X'&&y!=k.size())ans=max(ans,f(x+1,y,1));
                         ~^~~~~~~~~~
paint.cpp:26:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(y!=k.size())ans=max(ans,f(x+1,y,1));
                ~^~~~~~~~~~
paint.cpp:31:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=x; i<a.size(); i++)
                  ~^~~~~~~~~
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:46:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0; i<a.size(); i++)
                  ~^~~~~~~~~
paint.cpp:48:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0; j<=k.size(); j++)
                      ~^~~~~~~~~~
paint.cpp:60:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<a.size();i++)
                 ~^~~~~~~~~
#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...