Codeforces Beta Round #86 Div. 1 Only (9/9 0:00~2:00)
■A. A Grammar Lessons
問題
Petyaの作った言語は以下のBNFにより定義される.与えられた文字列がSentenceか判定せよ.Sentence := Statement | AdjectiveM | AdjectiveF | NounM | NounF | VerbM | VerbF
Statement := (AdjectiveM* NounM VerbM*) | (AdjectiveF* NounF VerbF*)
AdjectiveM := "lios" | Alphabet AdjectiveM
AdjectiveF := "liala" | Alphabet AdjectiveF
NounM := "etr" | Alphabet NounM
NounF := "etra" | Alphabet NounF
VerbM := "initis" | Alphabet VerbM
VerbF := "inites" | Alphabet VerbF
Alphabet := "a"|"b"|"c"|…|"z"
解法
書くだけ.StatementのBNFをDFAにしてからコードにすると,機械的に解ける.#86 Div. 1 A. A Grammar Lessons
■B. Petr#
問題
文字列s,sbegin,sendが与えられる.以下を満たす文字列tの個数を求めよ.
- tはsの部分文字列
- sbeginはtのprefix
- sendはtのsuffix
解法
sにおいて,sbeginおよびsendを検索して,インデックスの候補を列挙する.sbegin,sendに関するインデックスks,keについて,
s[ks]からsbeginがあり,
s[ke]からsendがあり,
ks≦ke かつ ks+|sbegin|≦ke+|send|
ならば,
s[ks],…,s[ke],…,s[ke+|send|-1]
が条件を満たす文字列.
条件を満たす文字列を逐一生成すると,TLEするので,
ハッシュを計算し,重複要素を取り除くことで高速化.
#86 Div. 1 B. Petr#
■Result
o---- 254pts. 215th1684->1700
0 件のコメント:
コメントを投稿