zoj3784 String of Infinity 思维。。。

2014-11-24 12:32:39 · 作者: · 浏览: 0

堂堂一道AC自动机被我们乱搞过了 目前zoj排名第一 从run memory目测还没人像我们这样搞的 笑死了

看题目第一遍不太懂第三个条件的意思。

通过样例,第一个明显no,第二个yes的构造方法应该是abbabbbabbbb……

由此我们想到,不管题目给定几个字母,我们只要找到一个字母可以无限增长下去、一个字母有限,且两个字母组合在一起不构成banned word

只要存在这样两个字母,那么一定可以构造出来

#include
  
   
#include
   
     const int maxlen=1e3+5; int n,m,jud[30][30],vis[30]; char s[maxlen]; void check() { int vvis[30],q[30],num=0; memset(vvis,0,sizeof(vvis)); for (int i=0;s[i];i++) { vvis[s[i]-'a']++; if (vvis[s[i]-'a']==1) q[num++]=s[i]-'a'; } if (num==2) { if (vvis[q[0]]==1) jud[q[1]][q[0]]=0; if (vvis[q[1]]==1) jud[q[0]][q[1]]=0; } } int main() { int t; scanf("%d",&t); while (t--) { scanf("%d%d",&n,&m); for (int i=0;i