HandlesSpelling
TCO10 Qual 2 · 2010-04-11 · by Nickolas
Problem Statement
The rules of the game are as follows. First, you remove all spaces and punctuation from the sentence. Then, you try to spell out the resulting string by printing out name badges and arranging them in a single row. Each badge you use must contain a handle which is a contiguous substring of the string. Badges can touch but not overlap. Letters in the string which are not represented by the badges are considered "uncovered".
For example, consider the case where only the following TopCoder members exist: {"E", "HE", "L"}. If you want to spell the sentence "HELLO", you might try to do it by printing out one "E" badge and two "L" badges. However, "H" and "O" would then be uncovered, and you wouldn't be able to add an "HE" badge because it would overlap with the "E". A better way would be to print out one "HE" badge and two "L" badges. Then, only the "O" would be uncovered.
You want to create the best possible arrangement of badges, so you've come up with the following scoring system. Define A as the length of the longest contiguous sequence of letters covered with the badges, and B as the number of letters that are uncovered. If all letters are uncovered, A is equal to 0. The score of the arrangement is A^2-B.
You are given a
Constraints
- parts will contain between 1 and 20 elements, inclusive.
- Each element of parts will contain between 1 and 50 characters, inclusive.
- badges will contain between 1 and 50 elements, inclusive.
- Each element of badges will contain between 1 and 50 characters, inclusive.
- parts and badges will contain only uppercase letters ('A'-'Z').
- All elements of badges will be distinct.
{"HELLO"}
{"E","HE","L"}
Returns: 15
Example from the problem statement.
{"ALGORITHM","QUALIFICATION","ROUND","TWO"}
{"AL", "CAT", "GOR", "IFI", "ION", "ROUND", "T"}
Returns: 282
The optimal spelling is "AL"-"GOR"-I-"T"-HMQU-"AL"-"IFI"-"CAT"-"ION"-"ROUND"-"T"-WO. In this spelling, A=17 and B=7.
{"GOOD","LUCK"}
{"GOODLUCKBJ","G","L"}
Returns: -5
The handle used has to be a proper substring of the sentence spelled, and not vice versa. In this case at most one letter in a row can be covered with badges, and 6 letters are left uncovered, so the total score is negative.
{"ANDDOHAVEFUN"}
{"HAV"}
Returns: 0
{"QWERTYU"}
{"WE","TY","ERT"}
Returns: 5
test where "B is minimized" fails
{"WERWERW","HJKRSDFSIFG","WERJKOIEFAE","KRUIDFUI"}
{"XCV","MBVN","ZXCM"}
Returns: -37
no coverings at all
{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
{"X","XX","XXX","XXXX","XXXXX","XXXXXX","XXXXXXX","XXXXXXXX","XXXXXXXXX","XXXXXXXXXX","XXXXXXXXXXX","XXXXXXXXXXXX","XXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
Returns: 1000000
max test
{"VOQYFESLLJNJYXCFDUHNWZWOPLHBZGWEKDLZSCWOOV","XSHKCNTIYLVUUKDCJBZOARHDTJYOUCD","YGWJDGWBVNKFOMAONKCHTJIUVSTB","KMKIVC","KDAGRGNNWPLISUSRNGNKRQHLELHBLMEPXFMTWSDAAHFBXAM","NVINVIHMYXVSLFJRRIFVWCQAILTRSNIUXFAGTGITADZLYNA","YHWGPDHHAMJQLUWQEWWCNTXNRUKCSHLUKFHJNZXTQJEZJFPZ","ZPBYQRIBGLYHBMFVQDGMCHJLXPMXKX","NJOBXNIOZXFKBMXSFJIBXCQCLQFHBCZBZEGAYGFWZMVQXJ","FIGCZWIVVFMFRWOAQUZMZOOC","EA","OJCQKIWAMSCXMMAQKWEZBXGWULPFYWPCUODFIAQVOWUDBYD","DTHVDWYPZTRZSXIHUVPOHUO","MWDIPJUAYHIHLPEJFMCLFOYRJKZTNHDWDCMOSAVEZCP","AHOY","AVEXCGTEXSQBZPTST","AYWQULYXDXURJZZMP","PQEXPHYSLFINKKHAFDHKRXGJXTDRBMCDOYXSXEAUSWWOFM","TY","UGSTYRLTEQDADHFIKUDX"}
{"YFZNTPQTPHUETLXUSGYCTPPWCWIFQZKVSCVUARCYA","MEWWVHVMONKBKIJCYHYZLKGFZOGADMRPDGJJMSC","QRJYDSMNRXRZ","PAOCDBPEVAMSNGVOBOF","D","ENANIGRRITTFZWFXRNGVIRYLHABTPPGDVYUGAEZEDACNGHQAO","MCEZDWZAGYRWEDZUNRLGW","SRKKQQNEOOZGAF","JPEGKCEJCBAREVEICGJKMEHR","LIHNZUTEUOKQEXNXUKYS","DOIKDWFNFTSKABGABGUHLVTPAXI","HNVKNUDISGMRZYFFTBSHFBXIA","PUZDGGQKNTBIM","GVGSQX","MTTTVJUBKSRXKD","ZGLOGYHPRDGILJNZJSNKHKNOEUMKTWSOHXY","YRGNAYPOYHDXYMJULDEAKYEXDNN","MFVZSWHXE","GJPZFQRGIXILKXZN","CLDQUGWQTHTQHWDOJOCTUCSUAUCOVIIBIPCPPOTARF","QJEVOKPKOVKJWCEHEFNJBLXFUJYYOXLPPKTOBOMJBMTXJX","TQPPVFXXXQWZBSKJUKSV","FUPKVDPKFFOSEHBBKTVGZAYFBOZHDTMOFCRQBAAAHAWHT","TFFJVTITNZVVXBBHUFZIQNUSUW","GKQRCDRPPUNGWIN","KTNJZTJOQVORZFJEKUAYHZKOQK","RUZUCQBQKMLPYHNNMWJJMHWWCFJJVG","DTPSHKZKKNIUBWDGZQTUQYH","UKNSFM","BZSVCYCFGPOZUTNWYZZUWUD","NHHEPGKOMSUC","ZRASGMUIWLVKVLEUWYBJICSMENDKWULYBVIRCXNQBDP","IHBCMAQEJAXWTIXDIPABBTPTOLQNFXKTJWTPSIJGSFVTVOS","ZNTZIQVKIHKORESFDNVOXR","BRNBHYXCRANXABBOGGEFTZQUVETOQUN","KZWCKUUGAZHJQBGRSVDAVSCPKACYBHMYHFDWHZEDN","BCHHJGMRJYWZKVCMDGMQW","OIVGZTUMLVFADWEXKGOZLGYVLFRXCTWWV"}
Returns: -540
#8-17 are pure random, no coverings or small accidental ones
{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
{"A","B","C","D"}
Returns: -1000
min test
{"DTUXVYLIMKTRIRTJTCPVOKJGSXMAVUROFIBGAPGANQJDIIOGDK","ZEFVHVAHEBWRZGBMIOFURRNLLNPYOIHXMUASTJUXIRGDEYUIUF","YGUPTWSPQIRPXGLCUIBYCJEOEVKKJKNHGSAWMMKVNTUWCGROUZ","MEJWAMMHDHGVNCARRKYNBZCCBRFSDOEYFMRVPRUVQHMIJIRIRG","MNUVMUEEAORXYQUXMXVWHEGUDKRFKYUWRFAZOEVDGHLVXENPZH","EFRKNGIOLMHVYXVYJOKJFARIPBLTBPWATJAYXQEMMNYQSDHGTS","ZFPNUGTFQESNULZVCBBEBRSHWETFICINAFRJQYWYQUGBCJCLSO","TAEPSPOMGBIWOLVZFMJBESWXUDAFSRHMLJYHAXODLIYKSCXWTN","EYLDVWSRTHZZZVKPFPAZVIYEEKDYVGGVUSBHPBYGESPTHYAWUY","TYMSEMVVJVTEMWLKZDAJJIUPXCQHRUMRDJNZJUUDWVSDXYXIUP","AICCLDEFOBGVVAJKCUBXXTRLVRBMTPTWQMPRTXQYGMTXAIZYYX","ZXVHMPMZSHNOLPCTUDPOBCMDNANPZRWFXOIENLVJHNRMBEGGJG","GTDRPRCTZSABPGAWNFZVPGPXDEMXJZSIGYVNQEIINLSKQXSPDF","YNRQHVUAXSWKATGULW"}
{"UROF","GSXMAVUROFIBGAPGANQJDIIOGDKZEFVHVAHE","VUROFIBGAPGANQJDIIOGDKZEFVHVA","UXVYLIMKTR","OFIBGAPGANQJDIIOGDKZEFVHVAHEBWRZGBMI","KJG","UXVYLIMKTRIRT","ESN","IRTJTCPVOK","VNTUWCGROUZMEJWAMMHDHGVNCARRKYN","M","ROFIBGAPGANQJDIIOGDKZEFVHVAHEBWR","DTUXVYLIMKTRIRTJTCPVOKJGSXMAVUROFIBGAPGA","TCPVOKJGSXMAV","GAPGANQJD","PBLTBPWATJAYXQEMMNYQSDHGTSZFPNUG","GSXMAVUROFIBGAPGANQJDIIOGDKZEFVHVAHEBWRZGBMIOFURRN","XVYLIM","SXMAVUR","JTCPVOKJGSXMAVUROFIBGAPGANQ","MAVUROFIBGAPGANQ","OKJGSXMAVUROFIBGAPGAN","XMAVURO","RTJTCPVOKJGSXMAVURO","BZCCBRFSDOEYFMRVPRUVQHMIJIRIRGMNUVMUEE","TRIRTJTCPVOKJGSXMA","DMCVVAONHKJSPRTVTQGOZNLZQRNOWO","VYLIMKTRIRTJTCPVOKJGSXMAVUR","AORXYQUXMXVWHEGUDKRFKYUWRFAZOEVDGHLVXENPZHEFRK","PLZUYXQETBNUGABERFWOLREMCLZSQNBNUCGHHKLCWBLSSK","OKJGSXMAVUROFIBGAPGANQJDIIOG","AVUROFIBGAPGANQJDIIOGDKZEFV","TRIRTJTCPVOKJGSXMAVUROFIBGAPGANQJDIIOGDKZEFV","VYLIMKTR","JCZWHFLXHFFDXCYUZVDXOCTTQAZIFVGJIQGQSJ","IMKTRIRTJTCPVOKJGSXMAVUROFIBGAPGANQJDIIOGDKZ","FIBGAPGANQJDIIOGDK","TFQ","PVOKJGSXMAVUROFIBGAPGANQJDIIOGDKZ","KXYRHLHXQJXEWDMMVMXUMISWEAJVJPUYJHHWFEEXZETN","CPVOKJGSXMAVUROFIBGA","LIMKTRIRTJTCPVOKJGSXMAVUROFIBG","RQBWICBPDZEBTJOAZUJUSYOKKEPRECZUXCDXWTCSWQJXAA","XVYLIMKTRIRTJTCPVOKJGSXMAV","IRTJTCPVOKJGSXMAVUR","CPVOKJGSXMAVUROFIBGAPGA","DTUXVYLIMKTRIRTJTCPVOKJGSXM","NGIOLMHVYXVYJOKJFARI","DTUXVYLI"}
Returns: 29522
#19-68 are covering+random substrings+random handles
Submissions are judged against all 130 archived test cases, of which 10 are shown here. Case numbers match the judge’s.
Language: C++17 · define a public class HandlesSpelling with a public method int spellIt(vector<string> parts, vector<string> badges) · 130 test cases · 2 s / 256 MB per case