题解:B3759 [信息与未来 2021] 文本分类

· · 题解

考虑有效的英语单词很多,但是有效的拼音很少,所以找个拼音表就做完了?

其实是有一个问题的。就是说有些英语单词在拼音中也存在。

回顾英语的语法,发现大多数情况需要动词。

而我们回顾拼音表,发现一般动词很少(至少我只看到了 song),就算有的话,结合拼音表名词也出现的很少,那么我们的错误率是极小的。

又发现其实有一个在拼音表中的情态动词 can,所以有可能出现有 can 的句子。

但是考虑能出现什么句子。基本上就是 a man can song 这种。

我们的做法看上去到了绝境。

但是发掘题目数据范围,发现 10^3\leq n\leq 10^4,而这么长的真实文本显然不可能只出现这么几句话。

upd:根据作者的统计,与拼音重复的单词如下,可能不全,欢迎补充:

n.:各种人名,zen(禅宗信徒),you,tang(特性;强烈的味道;柄脚),tan(棕褐色,棕黄色;(日晒后变成的)棕褐色皮肤;鞣料树皮;(铺路和园艺中使用的)鞣酸皮渣),tong(钳子),song(歌曲),pan(锅),long(长的),lie(存在),hen(母鸡),hang(陈列),gong(奖章),fen(沼泽),ding(钟声),beng(大麻),bang(重击),ban(禁止),die(消亡)
v.:tan((使)晒成褐色,晒黑;鞣(革),硝(皮);<非正式,旧> 痛打(某人),鞭打(尤指作为惩罚)),long(渴望),lie(谎言),hang(悬挂),ding(打击),bang(爆炸),ban(禁止),die(死亡)
adj.:tan(棕黄色的,棕褐色的;晒黑的),long(长久的)
adv.:long(长久地),bang(正好)
vt.:tang(使声尖锐;装刀柄于)
vi.:tang(发出铿锵声;发出当的一声)
abbr.:tan(正切)
art.an(一个),a(一个)

你发现这些词显然凑不出长度为 10^3 的句子,所以我们的做法很正确!

所以我们证明了我们这个做法的正确率极高。

不放心的话可以特判几个英语的特殊情况,我没有特判。

#include <bits/stdc++.h>
using namespace std;
#define int long long
string ans[] = {
    "a",
    "ai",
    "an",
    "ang",
    "ao",
    "ba",
    "bai",
    "ban",
    "bang",
    "bao",
    "bei",
    "ben",
    "beng",
    "bi",
    "bian",
    "biao",
    "bie",
    "bin",
    "bing",
    "bo",
    "bu",
    "ca",
    "cai",
    "can",
    "cang",
    "cao",
    "ce",
    "cen",
    "ceng",
    "cha",
    "chai",
    "chan",
    "chang",
    "chao",
    "che",
    "chen",
    "cheng",
    "chi",
    "chong",
    "chou",
    "chu",
    "chuai",
    "chuan",
    "chuang",
    "chui",
    "chun",
    "chuo",
    "ci",
    "cong",
    "cou",
    "cu",
    "cuan",
    "cui",
    "cun",
    "cuo",
    "da",
    "dai",
    "dan",
    "dang",
    "dao",
    "de",
    "dei",
    "deng",
    "di",
    "dian",
    "diao",
    "die",
    "ding",
    "diu",
    "dong",
    "dou",
    "du",
    "duan",
    "dui",
    "dun",
    "duo",
    "e",
    "ei",
    "en",
    "eng",
    "er",
    "fa",
    "fan",
    "fang",
    "fei",
    "fen",
    "feng",
    "fo",
    "fou",
    "fu",
    "ga",
    "gai",
    "gan",
    "gang",
    "gao",
    "ge",
    "gei",
    "gen",
    "geng",
    "gong",
    "gou",
    "gu",
    "gua",
    "guai",
    "guan",
    "guang",
    "gui",
    "gun",
    "guo",
    "ha",
    "hai",
    "han",
    "hang",
    "hao",
    "he",
    "hei",
    "hen",
    "heng",
    "hong",
    "hou",
    "hu",
    "hua",
    "huai",
    "huan",
    "huang",
    "hui",
    "hun",
    "huo",
    "ji",
    "jia",
    "jian",
    "jiang",
    "jiao",
    "jie",
    "jin",
    "jing",
    "jiong",
    "jiu",
    "ju",
    "juan",
    "jue",
    "jun",
    "ka",
    "kai",
    "kan",
    "kang",
    "kao",
    "ke",
    "ken",
    "keng",
    "kong",
    "kou",
    "kou",
    "ku",
    "kua",
    "kuai",
    "kuan",
    "kuang",
    "kui",
    "kun",
    "kuo",
    "la",
    "lai",
    "lan",
    "lang",
    "lao",
    "le",
    "lei",
    "leng",
    "li",
    "lia",
    "lian",
    "liang",
    "liao",
    "lie",
    "lin",
    "ling",
    "liu",
    "long",
    "lou",
    "lu",
    "lv",
    "luan",
    "lue",
    "lve",
    "lun",
    "luo",
    "lv",
    "lve",
    "ma",
    "mai",
    "man",
    "mang",
    "mao",
    "me",
    "mei",
    "men",
    "meng",
    "mi",
    "mian",
    "miao",
    "mie",
    "min",
    "ming",
    "miu",
    "mo",
    "mou",
    "mu",
    "na",
    "nai",
    "nan",
    "nang",
    "nao",
    "ne",
    "nei",
    "nen",
    "neng",
    "ni",
    "nian",
    "niang",
    "niao",
    "nie",
    "nin",
    "ning",
    "niu",
    "nong",
    "nu",
    "nv",
    "nuan",
    "nue",
    "nve",
    "nuo",
    "nv",
    "nve",
    "o",
    "ou",
    "pa",
    "pai",
    "pan",
    "pang",
    "pao",
    "pei",
    "pen",
    "peng",
    "pi",
    "pian",
    "piao",
    "pie",
    "pin",
    "ping",
    "po",
    "pou",
    "pu",
    "qi",
    "qia",
    "qian",
    "qiang",
    "qiao",
    "qie",
    "qin",
    "qing",
    "qiong",
    "qiu",
    "qu",
    "quan",
    "que",
    "qve",
    "qun",
    "qve",
    "ran",
    "rang",
    "rao",
    "re",
    "ren",
    "reng",
    "ri",
    "rong",
    "rou",
    "ru",
    "ruan",
    "rui",
    "run",
    "ruo",
    "sa",
    "sai",
    "san",
    "sang",
    "sao",
    "se",
    "sen",
    "seng",
    "sha",
    "shai",
    "shan",
    "shang",
    "shao",
    "she",
    "shei",
    "shen",
    "sheng",
    "shi",
    "shou",
    "shu",
    "shua",
    "shuai",
    "shuan",
    "shuang",
    "shui",
    "shun",
    "shuo",
    "si",
    "song",
    "sou",
    "su",
    "suan",
    "sui",
    "sun",
    "suo",
    "ta",
    "tai",
    "tan",
    "tang",
    "tao",
    "te",
    "teng",
    "ti",
    "tian",
    "tiao",
    "tie",
    "ting",
    "tong",
    "tou",
    "tu",
    "tuan",
    "tui",
    "tun",
    "tuo",
    "wa",
    "wai",
    "wan",
    "wang",
    "wei",
    "wen",
    "weng",
    "wo",
    "wu",
    "xi",
    "xia",
    "xian",
    "xiang",
    "xiao",
    "xie",
    "xin",
    "xing",
    "xiong",
    "xiu",
    "xu",
    "xuan",
    "xue",
    "xun",
    "ya",
    "yan",
    "yang",
    "yao",
    "ye",
    "yi",
    "yin",
    "ying",
    "yong",
    "you",
    "yu",
    "yuan",
    "yue",
    "yve",
    "yun",
    "yve",
    "za",
    "zai",
    "zan",
    "zang",
    "zao",
    "ze",
    "zei",
    "zen",
    "zeng",
    "zha",
    "zhai",
    "zhan",
    "zhang",
    "zhao",
    "zhe",
    "zhen",
    "zheng",
    "zhi",
    "zhong",
    "zhou",
    "zhu",
    "zhua",
    "zhuai",
    "zhuan",
    "zhuang",
    "zhui",
    "zhun",
    "zhuo",
    "zi",
    "zong",
    "zou",
    "zu",
    "zuan",
    "zui",
    "zun",
    "zuo"
};
inline void solve(){
    int n;
    cin >> n;
    string s;
    bool f1 = 1 , f2 = 1;
    bool ff = 1;
    sort(ans , ans + 411);
    for(int i = 1;i <= n;i++){
        cin >> s;
        if(ff){
            bool fg = (*lower_bound(ans , ans + 411 , s) == s);
            f1 &= fg;
            if(s[0] == 't' && s[1] == 'h') f1 = 0;
            if(!f1){
                ff = 0;
                // cout << s << '\n';
            }
        }
    }
    if(f1) cout << "Pinyin\n";
    else cout << "English\n";
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0) , cout.tie(0);
    int t;
    cin >> t;
    while(t--) solve();
    return 0;
}