제출 #770307

#제출 시각아이디문제언어결과실행 시간메모리
770307AmylopectinCopy and Paste 3 (JOI22_copypaste3)C++14
25 / 100
3064 ms2800 KiB
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;
const long long mxn = 3e3 + 10;
// const long long mxn = 20;
char s[mxn] = {};
long long c1,c2,c3,u[mxn] = {},rev[mxn] = {},dp[mxn][mxn] = {};
long long re(long long cl,long long cr)
{
    if(dp[cl][cr] != 0)
    {
        return dp[cl][cr];
    }
    long long i,j,k,o,n = cr - cl + 1,cn,cm,cou,cma = 1,fmi = -1,cmi;
    for(i=cl; i<=cr; i++)
    {
        u[i] = 0;
    }
    fmi = c1 * n;
    for(i=n/2; i>0; i--)
    {
        cma = 1;
        for(j=cl; j<=cl+n - i*2; j++)
        {
            if(u[j] != i)
            {
                cou = 0;
                cn = j;
                rev[j] = j;
                for(k=j+1; k<j+i; k++)
                {
                    while(1)
                    {
                        if(s[k] == s[cn])
                        {
                            rev[k] = cn+1;
                            cn++;
                            break;
                        }
                        if(cn == j)
                        {
                            rev[k] = j;
                            break;
                        }
                        cn = rev[cn-1];
                    }
                }
                cn = j+i-1;
                for(k=j+i-1; k<=cr; k++)
                {
                    while(1)
                    {
                        if(s[k] == s[cn])
                        {
                            cn++;
                            break;
                        }
                        if(cn == j)
                        {
                            break;
                        }
                        cn = rev[cn-1];
                    }
                    if(cn == j+i)
                    {
                        u[k-i+1] = i;
                        cn = rev[cn-1];
                    }
                }
                cn = j+i-1;
                for(k=j+i-1; k<=cr; k++)
                {
                    while(1)
                    {
                        if(s[k] == s[cn])
                        {
                            cn++;
                            break;
                        }
                        if(cn == j)
                        {
                            break;
                        }
                        cn = rev[cn-1];
                    }
                    if(cn == j+i)
                    {
                        cou ++;
                        cn = j;
                        if(cr-k < i)
                            break;
                    }
                }
                // if(fmi == -1)
                // {
                //     fmi = re(j,j+i-1) + c2 + cou * c3 + c1 * (n-cou*i);
                // }
                // else 
                // {
                    cmi = re(j,j+i-1) + c2 + cou * c3 + c1 * (n-cou*i);
                    if(fmi > cmi)
                    {
                        fmi = cmi;
                    }
                // }
                // if(cou > cma)
                // {
                //     cma = cou;
                // }
            }
        }
    }
    dp[cl][cr] = fmi;
    return fmi;
}
int main()
{
    long long i,j,m,n;
    scanf("%lld %s %lld %lld %lld",&n,&s,&c1,&c2,&c3);
    re(0,n-1);
    printf("%lld",dp[0][n-1]);
    return 0;
}

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

copypaste3.cpp: In function 'long long int re(long long int, long long int)':
copypaste3.cpp:16:21: warning: unused variable 'o' [-Wunused-variable]
   16 |     long long i,j,k,o,n = cr - cl + 1,cn,cm,cou,cma = 1,fmi = -1,cmi;
      |                     ^
copypaste3.cpp:16:42: warning: unused variable 'cm' [-Wunused-variable]
   16 |     long long i,j,k,o,n = cr - cl + 1,cn,cm,cou,cma = 1,fmi = -1,cmi;
      |                                          ^~
copypaste3.cpp:16:49: warning: variable 'cma' set but not used [-Wunused-but-set-variable]
   16 |     long long i,j,k,o,n = cr - cl + 1,cn,cm,cou,cma = 1,fmi = -1,cmi;
      |                                                 ^~~
copypaste3.cpp: In function 'int main()':
copypaste3.cpp:121:18: warning: format '%s' expects argument of type 'char*', but argument 3 has type 'char (*)[3010]' [-Wformat=]
  121 |     scanf("%lld %s %lld %lld %lld",&n,&s,&c1,&c2,&c3);
      |                 ~^                    ~~
      |                  |                    |
      |                  char*                char (*)[3010]
copypaste3.cpp:120:15: warning: unused variable 'i' [-Wunused-variable]
  120 |     long long i,j,m,n;
      |               ^
copypaste3.cpp:120:17: warning: unused variable 'j' [-Wunused-variable]
  120 |     long long i,j,m,n;
      |                 ^
copypaste3.cpp:120:19: warning: unused variable 'm' [-Wunused-variable]
  120 |     long long i,j,m,n;
      |                   ^
copypaste3.cpp:121:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  121 |     scanf("%lld %s %lld %lld %lld",&n,&s,&c1,&c2,&c3);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...