A:
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<set> 5 #define maxn 5+8*300000 6 using namespace std; 7 8 set<int>S; 9 int Enum=0,score[maxn],son[maxn][26],l[maxn]; 10 bool flag[maxn];//标记是否打星 11 int tot_score,num,str_len;//个数 12 char ans_string[15]; 13 char Map[5][5]; 14 bool vis[5][5]; 15 void init(){ 16 tot_score=0;num=0;str_len=0; 17 } 18 int newnode(){ 19 Enum++; 20 memset(son[Enum],0,26*sizeof(son[Enum][0])); 21 flag[Enum]=false; 22 score[Enum]=0; 23 l[Enum]=0; 24 return Enum; 25 } 26 int cal_score(int len){ 27 if (len<=2) return 0; 28 if (len<=4) return 1; 29 if (len==5) return 2; 30 if (len==6) return 3; 31 if (len==7) return 5; 32 if (len==8) return 11; 33 } 34 void Insert(char *str){ 35 int u=0,len=strlen(str); 36 for(int i=0;i<len;i++){ 37 int id=str[i]-'A'; 38 if (son[u][id]==0){ 39 son[u][id]=newnode(); 40 } 41 u=son[u][id]; 42 } 43 //u是最底层,也代表当前结点 44 score[u]=cal_score(len); 45 flag[u]=true; 46 l[u]=len; 47 } 48 int a[][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; 49 char ss[20]; 50 void dfs(int id,int x,int y,int k){ 51 52 if (flag[id] && S.count(id)==0){ 53 num++; 54 S.insert(id); 55 tot_score+=score[id]; 56 ss[k]='