打卡信奥刷题(3336)用C++实现信奥题 P9364 [ICPC 2022 Xi‘an R] Perfect Word
P9364 [ICPC 2022 Xi’an R] Perfect Word题目描述给定nnn个字符串你需要找到最长的「完美单词」。字符串ttt称为「完美单词」当且仅当它的所有非空子串都出现在给定的字符串中。字符串sss称为ttt的子串当且仅当sss可由ttt在开头和结尾分别删去零个或若干个字符得到。1≤n≤1051\leq n\leq 10 ^ 51≤n≤105字符串仅由小写字母组成且总长不超过10510 ^ 5105。输入格式第一行一个整数nnn。接下来nnn行每行一个字符串。输出格式输出一行一个整数表示最长的「完美单词」的长度。输入输出样例 #1输入 #14 a t b ab输出 #12C实现#includebits/stdc.husingnamespacestd;#defineLLlonglongconstintN1e510;intn,id,ans,tr[N][30],End[N*30];string t[N];boolex[N];inlinevoidinsert(intcur){intp0;for(inti0;i(int)t[cur].size();i){inttot[cur][i]-a;if(!tr[p][to])tr[p][to]id;ptr[p][to];}End[p]cur;}inlineboolcheck(intx){if((int)t[x].size()1)returntrue;intp0;for(inti0;i(int)t[x].size()-1;i)ptr[p][t[x][i]-a];if(!ex[End[p]])returnfalse;p0;for(inti1;i(int)t[x].size();i)ptr[p][t[x][i]-a];if(!ex[End[p]])returnfalse;returntrue;}intmain(){scanf(%d,n);for(inti1;in;i)cint[i];sort(t1,tn1,[](string a,string b){return(int)a.size()(int)b.size();});for(inti1;in;i)insert(i);for(inti1;in;i)if(check(i))ex[i]true,ansmax(ans,(int)t[i].size());printf(%d,ans);return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容