P8243 [COCI 2013/2014 #3] REČENICE

题目描述

很久以前,在一个只有数学学生居住的遥远国度里,Iva 和 Vedran 正在讨论一种特殊的句子。这些句子中正好有一个单词表示一个数字,并且这个数字等于句子中字母的总数。例如 `This sentence has thirtyone letters.` 和 `Blah Blah seventeen`。 Jurica 无意中听到了朋友们的谈话,决定用他背诵的大量特殊的句子给他们留下深刻印象。他急忙回家,写了一个程序,给定一个句子,求出使得句子变得特殊的能放进去的最小数字。 不幸的是,他的电脑坏了,现在他需要你的帮助。写一个程序来帮助 Jurica! 以下是一些补充说明: - 句子的形式是:$\textit{word}_1~\textit{word}_2~\textit{word}_3~\cdots~\textit{word}_{n-1}~\textit{word}_n$。这 $n$ 个单词中恰好有一个 `$`,表示需要填入的表示一个数字的单词。例如,`this sentence has thirtyone letters` 将变为 `this sentence has $ letters`。 - 用来表示数字的单词遵循如下规则: - 对于所有 $1\sim 19$ 的整数,表示它们的单词从小到大依次为 `one`、`two`、`three`、`four`、`five`、`six`、`seven`、`eight`、`nine`、`ten`、`eleven`、`twelve`、`thirteen`、`fourteen`、`fifteen`、`sixteen`、`seventeen`、`eighteen` 和 `nineteen`。 - 对于所有 $20\sim 90$ 的整十数,表示它们的单词从小到大依次为 `twenty`、`thirty`、`forty`、`fifty`、`sixty`、`seventy`、`eighty`、`ninety`。 - 对于所有 $100\sim 900$ 的整百数,表示它们的单词从小到大依次为 `onehundred`、`twohundred`、`threehundred`、`fourhundred`、 `fivehundred`、 `sixhundred`、 `sevenhundred`、 `eighthundred`、 `ninehundred`。 - 对于其它所有的两位数,先在开头放入表示不超过该数的最大的整十数的单词,再在后面拼接表示该两位数的个位数的单词。例如,表示整数 $68$ 的单词为 `sixtyeight`。 - 对于其它所有的三位数,先在开头放入表示不超过该数的最大的整百数的单词,再在后面拼接表示其后两位数的单词(按照前面的规则)。例如,表示整数 $319,530,971$ 的单词分别为 `threehundrednineteen`、`fivehundredthirty` 和 `ninehundredseventyone`。

输入格式

第一行输入一个整数 $n$,表示句子中的单词个数。 随后 $n$ 行,每行一个字符串,表示句子中的所有单词。保证 `$` 在其中恰好出现一次。

输出格式

输出一行 $n$ 个字符串,表示将 `$` 替换为使得句子特殊的表示最小数字的单词后的句子。

说明/提示

**【样例 2 解释】** `$` 填入表示整数 $30$ 的单词 `thirty`,此时所有单词的字母总数为 $6+2+3+6+2+7+4=30$。 **【样例 3 解释】** 请注意本题中的句子可能并不满足英语语法要求。 **【数据范围与限制】** **本题开启捆绑测试**。各个子任务的分值和特殊限制如下所述: - Subtask 1(40 pts):`$` 中填入的单词所对应的数字不超过 $50$。 - Subtask 2(60 pts):无特殊限制。 对于所有数据,$1\leqslant n\leqslant 20$,`$` 中填入的单词所对应的数字不超过 $1000$。 **【题目来源】** 本题来源自 **_[COCI 2013-2014](https://hsin.hr/coci/archive/2013_2014/) [CONTEST 3](https://hsin.hr/coci/archive/2013_2014/contest3_tasks.pdf) T3 REČENICE_**,按照原题数据配置,满分 $100$ 分。 由 [Eason_AC](https://www.luogu.com.cn/user/112917) 翻译整理提供。