int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif while (scanf("%s", input) != EOF && input[0] != '#') { int i; for (i = 0; input[i] != 0; i++) lower_input[i] = input[i] | 0x20; lower_input[i] = 0; sort(lower_input, lower_input+i); m.insert(make_pair(lower_input, input)); } for (mmap::iterator it = m.begin(); it != m.end(); it++) if (m.count(it->first) == 1) vec.push_back(it->second); sort(vec.begin(), vec.end()); for(size_t i = 0; i < vec.size(); i++) puts(vec[i].c_str()); return 0; }
//return zero if fine. int writeDat(char *last,mmap &mm,tary<char> *keep,tary<char> *major,tary<char> *minor,BGZF *BFP,FILE *fp,int doCompl){ assert(last!=NULL); if((major!=NULL) ^ (minor!=NULL)){ fprintf(stderr,"major and minor should be the same\n"); return 1; } int hasMajMin =0; if(major!=NULL) hasMajMin =1; fprintf(stderr,"\t-> Writing chr:\'%s\' \n",last); mmap::iterator it=mm.find(last); if(it!=mm.end()){ return 1; }else mm[strdup(last)]=1; //write data and index stuff int64_t retVal =bgzf_tell(BFP);//now contains the offset to which we should point. //write chrname int clen=strlen(last)+1; fwrite(&clen,1,sizeof(int),fp); fwrite(last,clen,sizeof(char),fp); fwrite(&retVal,1,sizeof(int64_t),fp); for(int i=0;doCompl&&i<keep->l;i++) if(keep->d[i]==0) keep->d[i]=1; else keep->d[i]=0; fwrite(&keep->l,sizeof(size_t),1,fp);//write len of chr fwrite(&hasMajMin,1,sizeof(int),fp); aio::bgzf_write(BFP,keep->d,keep->l);//write keep if(hasMajMin){ aio::bgzf_write(BFP,major->d,major->l);//write maj aio::bgzf_write(BFP,minor->d,minor->l);//write min } return 0; }