UVA Live 5029 Encoded Barcodes 字典树-水题

来源:互联网 发布:mac pro强制重启快捷键 编辑:程序博客网 时间:2024/05/11 17:44

轻松1A无压力

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>using namespace std;const int bk=26;struct node{int val;node* nxt[bk];node(){val=0;memset(nxt,0,sizeof(nxt));}}*root;int n,m,k;void insert(char *s){node *rt;for(rt=root;*s;rt=rt->nxt[*s-'a'],s++)if(rt->nxt[*s-'a']==NULL){rt->nxt[*s-'a']=new node;rt->nxt[*s-'a']->val++;}else rt->nxt[*s-'a']->val++;}int query(char *s){node *rt;for(rt=root;*s;rt=rt->nxt[*s-'a'],s++)if(rt->nxt[*s-'a']==NULL)return 0;return rt->val;}double num[100];int bin[100];char q[100];int main (){while(scanf("%d%d",&n,&m)!=EOF){root=new node;char str[100];for(int i=1;i<=n;++i){scanf("%s",str);insert(str);}int ans=0;double high,low,ave;for(int i=1;i<=m;++i){scanf("%d",&k);for(int j=1;j<=k;++j){high=-11111111;low=100000000.0;for(int z=1;z<=8;++z){scanf("%lf",&num[z]);if(num[z]>high)high=num[z];if(num[z]<low)low=num[z];}ave=(high+low)/2;for(int z=1;z<=8;++z)if(num[z]>ave)bin[z]=1;else bin[z]=0;int nn=0;for(int z=8;z>=1;--z)if(bin[z])nn+=(int)pow(2.0,8-z);q[j-1]=nn;}q[k]='\0';ans+=query(q);}printf("%d\n",ans);root=NULL;}//system("pause");return 0;}


原创粉丝点击