Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
到底哪里错了,哪位牛人帮忙看下,谢谢!/* 我事先对这些演绎进行了排序,排序的准则:一个演绎后面的字符串包含另一个演绎前面的字符串,就把这个演绎放到另一个演绎的前面. */ #include <cstdio> #include <ctype.h> #include <algorithm> using namespace std; struct dtn{ int fnt[52]; int bck[52]; }; const int M=256; dtn ded[M]; int pos; void change(int a1[],char *str) { memset(a1,0,sizeof(int)*52); for(int i=0;str[i];i++) if(isupper(str[i])) a1[str[i]-'A'+26]=1; else a1[str[i]-'a']=1; } void retr(char *fir,char *sec){ memset(ded[pos].fnt,0,sizeof(int)*52); for(int i=0;fir[i];i++) if(isupper(fir[i])) ded[pos].fnt[fir[i]-'A'+26]=ded[pos].bck[fir[i]-'A'+26]=1; else ded[pos].fnt[fir[i]-'a']=ded[pos].bck[fir[i]-'a']=1; change(ded[pos].bck,sec); pos++; } bool contain(int a1[],int a2[]){ for(int i=0;i<52;i++) if(a1[i]>=a2[i]); else return false; return true; } void combine(int a1[],int a2[]){ for(int i=0;i<52;i++) a1[i]|=a2[i]; } bool cmp(dtn x,dtn y){ return contain(x.bck,y.fnt); } int main() { int n,m,i,j; int quest[52],ans[52]; char fir[256],sec[256],cmd[256]; while(scanf("%d%d",&n,&m)==2){ pos=0; for(i=0;i<n;i++){ scanf("%s %*s %s",fir,sec); retr(fir,sec); } sort(ded,ded+pos,cmp); for(i=1;i<n;i++) for(j=0;j<i;j++) if(contain(ded[j].bck,ded[i].fnt)) combine(ded[j].bck,ded[i].bck); while(m--){ scanf("%s",cmd); change(quest,cmd); memcpy(ans,quest,sizeof(quest)); for(i=0;i<n;i++){ if(contain(quest,ded[i].fnt)) combine(ans,ded[i].bck); } for(i=0;i<52;i++) if(ans[i]) printf("%c",i>25?'A'+(i-26):'a'+i); printf("\n"); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator