int main() { scanf("%d%d",&n,&m); scanf("%s",objs+1); for (int i=1;i<=n;++i) { scanf("%s",dic[i]+1); } memset(f,60,sizeof(f)); f[0]=0; for (int i=1;i<=m;++i) { f[i]=min(f[i],f[i-1]+1); for (int j=1;j<=n;++j) { if (startp[j]<i) getmatch(j,i); if (match[j]<=m) { f[match[j]]=min(f[match[j]], f[i-1]+(match[j]-i+1)-strlen(dic[j]+1)); } } } printf("%d\n",f[m]); return 0; }
int strindex (int c[], char s[]) { c[LINDEX] = 0; c[RMATCH] = -1; while (c[CURRCH] != EOF) { getmatch (c, s); if (c[CURRCH] == '\n') break; } if (c[RMATCH] > -1) return MATCH; else return NOMATCH; }
/* * Get the level of indention after line lp is processed * Note getindent has two returns: * curi = value if indenting current line. * return value = value affecting subsequent lines. */ static int getindent(const struct line *lp, int *curi) { int lo, co; /* leading space, current offset*/ int nicol = 0; /* position count */ int ccol = 0; /* current column */ int c = '\0'; /* current char */ int newind = 0; /* new index value */ int stringp = FALSE; /* in string? */ int escp = FALSE; /* Escape char? */ int lastc = '\0'; /* Last matched string delimeter */ int nparen = 0; /* paren count */ int obrace = 0; /* open brace count */ int cbrace = 0; /* close brace count */ int contp = FALSE; /* Continue? */ int firstnwsp = FALSE; /* First nonspace encountered? */ int colonp = FALSE; /* Did we see a colon? */ int questionp = FALSE; /* Did we see a question mark? */ int slashp = FALSE; /* Slash? */ int astp = FALSE; /* Asterisk? */ int cpos = -1; /* comment position */ int cppp = FALSE; /* Preprocessor command? */ *curi = 0; /* Compute leading space */ for (lo = 0; lo < llength(lp); lo++) { if (!isspace(c = lgetc(lp, lo))) break; if (c == '\t' #ifdef NOTAB && !(curbp->b_flag & BFNOTAB) #endif /* NOTAB */ ) { nicol |= 0x07; } nicol++; } /* If last line was blank, choose 0 */ if (lo == llength(lp)) nicol = 0; newind = 0; ccol = nicol; /* current column */ /* Compute modifiers */ for (co = lo; co < llength(lp); co++) { c = lgetc(lp, co); /* We have a non-whitespace char */ if (!firstnwsp && !isspace(c)) { contp = TRUE; if (c == '#') cppp = TRUE; firstnwsp = TRUE; } if (c == '\\') escp = !escp; else if (stringp) { if (!escp && (c == '"' || c == '\'')) { /* unescaped string char */ if (getmatch(c, lastc)) stringp = FALSE; } } else if (c == '"' || c == '\'') { stringp = TRUE; lastc = c; } else if (c == '(') { nparen++; } else if (c == ')') { nparen--; } else if (c == '{') { obrace++; firstnwsp = FALSE; contp = FALSE; } else if (c == '}') { cbrace++; } else if (c == '?') { questionp = TRUE; } else if (c == ':') { /* ignore (foo ? bar : baz) construct */ if (!questionp) colonp = TRUE; } else if (c == ';') { if (nparen > 0) contp = FALSE; } else if (c == '/') { /* first nonwhitespace? -> indent */ if (firstnwsp) { /* If previous char asterisk -> close */ if (astp) cpos = -1; else slashp = TRUE; } } else if (c == '*') { /* If previous char slash -> open */ if (slashp) cpos = co; else astp = TRUE; } else if (firstnwsp) { firstnwsp = FALSE; } /* Reset matches that apply to next character only */ if (c != '\\') escp = FALSE; if (c != '*') astp = FALSE; if (c != '/') slashp = FALSE; } /* * If not terminated with a semicolon, and brace or paren open. * we continue */ if (colonp) { *curi += cc_colon_indent; newind -= cc_colon_indent; } *curi -= (cbrace) * cc_basic_indent; newind += obrace * cc_basic_indent; if (nparen < 0) newind -= cc_cont_indent; else if (nparen > 0) newind += cc_cont_indent; *curi += nicol; /* Ignore preprocessor. Otherwise, add current column */ if (cppp) { newind = nicol; *curi = 0; } else { newind += nicol; } if (cpos != -1) newind = findcolpos(curbp, lp, cpos); return (newind); }