Submission #773514

#TimeUsernameProblemLanguageResultExecution timeMemory
773514AmylopectinPaint By Numbers (IOI16_paint)C++14
59 / 100
1 ms212 KiB
#include "paint.h"
#include <string>
#include <cstdlib>
using namespace std;
const int mxn = 210;
int m,c[mxn] = {},dp[mxn][mxn] = {},ru,fr[mxn],to[mxn] = {};
string ans;
string cal(int cl,int cr,int len)
{
    int i,j,cn,cm,fn,fm,su = -1,accu = -1;
    string s;
    if(cl > cr)
    {
        for(i=0; i<len; i++)
        {
            s.push_back('_');
        }
        return s;
    }
    for(i=0; i<len; i++)
    {
        s.push_back('?');
    }
    for(i=cl; i<=cr; i++)
    {
        su += c[i]+1;
    }
    for(j=cl; j<=cr; j++)
    {
        for(i=len-su+accu+1; i<accu+c[j]+1; i++)
        {
            s[i] = 'X';
        }
        accu += c[j]+1;
    }
    if(su == len)
    {
        for(i=0; i<len; i++)
        {
            if(s[i] == '?')
            {
                s[i] = '_';
            }
        }
    }
    return s;
}
int re(int ch,int ccn)
{
    if(dp[ch][ccn] != -1)
    {
        return dp[ch][ccn];
    }
    // if(ch == ru)
    // {
    //     if(ru == )
    // }
    int i,j,cm,fn,fm,ret,su = -1,clen = to[ch] - fr[ch]+1,of = 0;
    string s;
    for(i=ccn-1; i<m; i++)
    {
        if(su > clen)
        {
            break;
        }
        ret = re(ch+1,i+1);
        if(ret == 1)
        {
            of = 1;
            s = cal(ccn,i,clen);
            for(j=0; j<clen; j++)
            {
                cm = fr[ch] + j;
                if(ans[cm] == '0')
                {
                    ans[cm] = s[j];
                }
                else if(s[j] == '?')
                {
                    ans[cm] = '?';
                }
                else if((s[j] == '_' && ans[cm] == 'X') || (s[j] == 'X' && ans[cm] == '_'))
                {
                    ans[cm] = '?';
                }
            }
        }
        su += c[i+1] + 1;
    }
    dp[ch][ccn] = of;
    return of;
}
std::string solve_puzzle(std::string s, std::vector<int> cc) 
{
    int i,j,n,be;
    string fa;
    n = s.size();
    m = cc.size();
    for(i=0; i<m; i++)
    {
        c[i] = cc[i];
    }
    ru = 0;
    be = 0;
    for(i=0; i<n; i++)
    {
        ans.push_back('0');
    }
    for(i=0; i<n-1; i++)
    {
        if(s[i] == '_')
        {
            ans[i] = '_';
        }
        if(s[i]!= s[i+1])
        {
            if(s[i] == '.')
            {
                fr[ru] = be;
                to[ru] = i;
                ru++;
            }
            else 
            {
                be = i+1;
            }
        }
    }
    if(s[n-1] == '_')
    {
        ans[n-1] = '_';
    }
    if(s[n-1] == '.')
    {
        fr[ru] = be;
        to[ru] = n-1;
        ru++;
    }
    for(i=0; i<ru; i++)
    {
        for(j=0; j<=m; j++)
        {
            dp[i][j] = -1;
        }
    }
    for(j=0; j<m; j++)
    {
        dp[ru][j] = 0;
    }
    dp[ru][m] = 1;
    re(0,0);
    // ans = cal(0,m-1,n);

    return ans;
}

Compilation message (stderr)

paint.cpp: In function 'std::string cal(int, int, int)':
paint.cpp:10:13: warning: unused variable 'cn' [-Wunused-variable]
   10 |     int i,j,cn,cm,fn,fm,su = -1,accu = -1;
      |             ^~
paint.cpp:10:16: warning: unused variable 'cm' [-Wunused-variable]
   10 |     int i,j,cn,cm,fn,fm,su = -1,accu = -1;
      |                ^~
paint.cpp:10:19: warning: unused variable 'fn' [-Wunused-variable]
   10 |     int i,j,cn,cm,fn,fm,su = -1,accu = -1;
      |                   ^~
paint.cpp:10:22: warning: unused variable 'fm' [-Wunused-variable]
   10 |     int i,j,cn,cm,fn,fm,su = -1,accu = -1;
      |                      ^~
paint.cpp: In function 'int re(int, int)':
paint.cpp:58:16: warning: unused variable 'fn' [-Wunused-variable]
   58 |     int i,j,cm,fn,fm,ret,su = -1,clen = to[ch] - fr[ch]+1,of = 0;
      |                ^~
paint.cpp:58:19: warning: unused variable 'fm' [-Wunused-variable]
   58 |     int i,j,cm,fn,fm,ret,su = -1,clen = to[ch] - fr[ch]+1,of = 0;
      |                   ^~
#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...