万恶UVA评我0分,但是在别的OJ上是100
#include<bits/stdc++.h>
using namespace std;
int t,n,cnt;
string s[1000010];
struct trie{
int nxt[1000010][2],vis[1000010],cnt;
void init(){
vis[0]=nxt[0][0]=nxt[0][1]=cnt=0;
}int insert(string s,int len){
int q=0,flag=0;
for(int i=0;i<len;i++){
int c=s[i]-'0';
if(nxt[q][c]==0){
cnt++;
vis[cnt]=nxt[cnt][0]=nxt[cnt][1]=0;
nxt[q][c]=cnt;
}else if(i==len-1){
flag=1;
}q=nxt[q][c];
if(vis[q]==1){
flag=1;
}
}vis[q]=1;
return flag;
}
}tree;
int main(){
while(cin>>s[n]){
if(s[n][0]=='9'){
cnt++;
tree.init();
int flag=0;
for(int i=0;i<n;i++){
if(tree.insert(s[i],s[i].size())==1){
flag=1;
}
}if(flag==1){
printf("Set %d is not immediately decodable\n",cnt);
}else{
printf("Set %d is immediately decodable\n",cnt);
}n=0;
}n++;
}return 0;
}