bool findTree(Node *node, char *s, int size, bool exact){ if(node == NULL)return false; if(size == 0 && (!exact || node->numberOfWord != NO_END_OF_WORD)) return true; int maxPref = maxPrefix(s, size, node->text, node->size); if(maxPref == size && (!exact || node->size == size)) return !exact || node->numberOfWord != NO_END_OF_WORD; if(maxPref < node->size) return false; if(node->sons[cToI(s[maxPref])] == NULL) return false; return findTree(node->sons[cToI(s[maxPref])], s + maxPref, size - maxPref, exact); }
void ALL::print_function(vector<int>& record_array,char *advise_string,int flag){ if(flag>=record_array.size()){return;} for(int i=0;i<=61;i++){ advise_string[ record_array[flag] ]=antiTranslate(i); print_function(record_array,advise_string,flag+1); int now=translate(advise_string[0]); if( findTree(tree[now],advise_string,0,strlen(advise_string)-1)<0 ){ char *tmp=new char[101]; strcpy(tmp,advise_string); TEN.push_back(tmp); } } return; }
//dodaje ostatni dodany do bazy wyraz void addLastWord(void){ Word *last = &words[numberOfWords - 1]; if(findTree(root, last->text, last->size, true)) ignore(); if(checkBadLine()){ numberOfWords--; deleteWord(&words[numberOfWords]); return; } if(root == NULL) root = makeLeaf(NULL, 0, NO_END_OF_WORD, NULL); addWordToNode(root, last->text, last->size, numberOfWords - 1); nodes(); assert(endOfWord[numberOfWords - 1] != NULL); printf("word number: %d\n", numberOfWords - 1); }
TEST(BoltNutTest, First) { std::srand ( unsigned ( std::time(0) ) ); // Количество элементов int count = 10; // Создаем списки болтов и гаек std::vector<Bolt> bolts; std::vector<Nut> nuts; for (int i = 1; i <= count; ++i) { Bolt bolt; Nut nut; bolt.size = nut.size = i; bolts.push_back(bolt); nuts.push_back(nut); } unsigned int cmp = 0; // Перемешиваем болты std::random_shuffle ( bolts.begin(), bolts.end() ); // Эталонный список пар, с которым будет сравниваться результат, // возвращенный функцией findTree. std::vector<Pair> p; for (unsigned int k = 0; k < bolts.size(); ++k) { Pair pr; pr.bolt.size = pr.nut.size = bolts[k].size; p.push_back(pr); } // Uncomment next line to fail test. // p[0].bolt.size = -1; // Перемешиваем гайки std::random_shuffle ( nuts.begin(), nuts.end() ); // Находим пары болтов и гаек std::vector<Pair> pairs = findTree(bolts, nuts, cmp); // Тестируем. EXPECT_TRUE( equalPairVectors(p, pairs) ); }
void ALL::order_function(const int string_length,const int& length_dis,const int ID_length,vector<int>& record_array,int string_score_remain,int flag){ if(string_score_remain==0){ char advise_string[101]; strncpy(advise_string,save_used_ID,string_length); advise_string[string_length]='\0'; //cout<<"advise_string="<<advise_string<<endl; int now=translate(advise_string[0]); if(record_array.size()==0){ if(findTree(tree[now],advise_string,0,strlen(advise_string)-1)<0&& strcmp(advise_string," ")!=0){ char *tmp = new char [101]; strcpy(tmp, advise_string); TEN.push_back(tmp); } } print_function(record_array,advise_string,0); return; } //cout<<"string_length= "<<string_length<<" "<<"flag= "<<flag<<endl; //cout<<"string_score_remain="<<string_score_remain<<endl; if(flag>=string_length){return;} //=============================== if(string_score_remain>=(string_length-flag)){ //cout<<"enter if and "<<"string_length= "<<string_length<<" "<<"flag= "<<flag<<endl; for(flag;flag<string_length;flag++){ /*cout<<"string_score_remain="<<string_score_remain<<" "; cout<<"flag= "<<flag<<endl; cout<<"string_length-flag="<<string_length-flag<<endl;*/ record_array.push_back(flag); order_function(string_length,length_dis,ID_length,record_array,string_score_remain-(string_length-flag),flag+1); record_array.pop_back(); } } else{ //cout<<"enter else"<<endl; order_function(string_length,length_dis,ID_length,record_array,string_score_remain,flag+1); } //================================ return; }
void fillHistoFromTreeVar(std::string& treedrawspec, int index, wTH1 *&wth1) { // Sample treedrawspec: // mytree:"TDCwinstart[%d]:runnum>>winstrt%d(70,202000,209000)","evtnum==1","prof P" // vector<string> v_tokens; string tid; TString drawspec; Tokenize(treedrawspec,v_tokens,":",true); if( (v_tokens.size() < 2) || (!v_tokens[0].size()) || (!v_tokens[2].size()) ) { cerr << "malformed root tree draw spec treeid:\"varexp\",\"selection\",option: " << treedrawspec << endl; return; } tid = v_tokens[0]; for (size_t i=2; i<v_tokens.size(); i++) { drawspec += v_tokens[i]; } int fmtcnt = drawspec.CountChar('%'); if (fmtcnt) { // use index for tree array var switch(fmtcnt) { case 1: drawspec = Form(drawspec,index); break; case 2: drawspec = Form(drawspec,index,index); break; case 3: drawspec = Form(drawspec,index,index,index); break; case 4: drawspec = Form(drawspec,index,index,index,index); break; case 5: drawspec = Form(drawspec,index,index,index,index,index); break; case 6: drawspec = Form(drawspec,index,index,index,index,index,index); break; default: cerr << "More than six fmt specifiers in drawspec found, fix me! " << drawspec <<endl; exit(-1); } } if( gl_verbose) cout<<"drawspec="<<drawspec<<endl; TTree *tree = findTree(tid); assert (tree); // can't use comma as delimiter since histo with binning spec may be supplied TObjArray *tokens = drawspec.Tokenize("\""); TString hname; TString varexp = ((TObjString *)(*tokens)[0])->GetString(); if (varexp.Contains(">>")) { TObjArray *rematches = TPRegexp(">>(\\w+)").MatchS(varexp); // get histo name assert(rematches->GetEntriesFast() ==2); hname = ((TObjString *)(*rematches)[1])->GetString(); if (wth1 && !hname.EqualTo(wth1->histo()->GetName())) { cerr << "Error: histo name in treedraw spec "<<hname; cerr <<" doesn't match named histo "<<wth1->histo()->GetName()<<endl; exit(-1); } } else { // add histo name assert (wth1); hname = TString(wth1->histo()->GetName()); varexp = varexp + ">>+" + hname; // append to pre-existing histo } if( gl_verbose) cout<<"varexp="<<varexp<<", hname="<<hname<<endl; switch(tokens->GetEntriesFast()) { case 1: tree->Draw(varexp,"","goff"); break; case 3: { TString cut = ((TObjString *)(*tokens)[2])->GetString(); tree->Draw(varexp,cut,"goff"); } break; case 4: // assume the cut string is blank { TString gopt = ((TObjString *)(*tokens)[3])->GetString(); gopt = gopt + " goff"; tree->Draw(varexp,"",gopt); } break; case 5: { TString cut = ((TObjString *)(*tokens)[2])->GetString(); TString gopt = ((TObjString *)(*tokens)[4])->GetString(); gopt = gopt + " goff"; tree->Draw(varexp,cut,gopt); } break; default: cerr << "malformed root tree draw spec treeid:varexp,selection,option"; for (int i=0; i<tokens->GetEntriesFast(); i++) cerr << i<<": "<< ((TObjString *)(*tokens)[i])->GetString() << " "; cerr << endl; break; } if (!wth1) { wth1 = new wTH1((TH1*)gDirectory->Get(hname)); assert(wth1); wth1->histo()->UseCurrentStyle(); } } // fillHistoFromTreeVar
void fillGraphFromTreeVar(std::string& treedrawspec,int index,wGraph_t *&pwg) { // Sample treedrawspec: // mytree:"TDCwinstart[%d]:runnum","evtnum==1","P" // vector<string> v_tokens; string tid; TString drawspec; Tokenize(treedrawspec,v_tokens,":",true); if( (v_tokens.size() < 2) || (!v_tokens[0].size()) || (!v_tokens[2].size()) ) { cerr << "malformed root tree draw spec treeid:\"varexp\",\"selection\",option: " << treedrawspec << endl; return; } tid = v_tokens[0]; for (size_t i=2; i<v_tokens.size(); i++) { drawspec += v_tokens[i]; } int fmtcnt = drawspec.CountChar('%'); if (fmtcnt) { // use index for tree array var switch(fmtcnt) { case 1: drawspec = Form(drawspec,index); break; case 2: drawspec = Form(drawspec,index,index); break; case 3: drawspec = Form(drawspec,index,index,index); break; case 4: drawspec = Form(drawspec,index,index,index,index); break; case 5: drawspec = Form(drawspec,index,index,index,index,index); break; case 6: drawspec = Form(drawspec,index,index,index,index,index,index); break; default: cerr << "More than six fmt specifiers in drawspec found, fix me! " << drawspec <<endl; exit(-1); } } if( gl_verbose) cout<<"drawspec="<<drawspec<<endl; TTree *tree = findTree(tid); assert (tree); // can't use comma as delimiter since histo with binning spec may be supplied TObjArray *tokens = drawspec.Tokenize("\""); TString hname; TString varexp = ((TObjString *)(*tokens)[0])->GetString(); if( gl_verbose) cout<<"varexp="<<varexp<<endl; switch(tokens->GetEntriesFast()) { case 1: tree->Draw(varexp,"","goff"); break; case 3: { TString cut = ((TObjString *)(*tokens)[2])->GetString(); tree->Draw(varexp,cut,"goff"); } break; case 4: // assume the cut string is blank { TString gopt = ((TObjString *)(*tokens)[3])->GetString(); gopt = gopt + " goff"; tree->Draw(varexp,"",gopt); } break; case 5: { TString cut = ((TObjString *)(*tokens)[2])->GetString(); TString gopt = ((TObjString *)(*tokens)[4])->GetString(); gopt = gopt + " goff"; tree->Draw(varexp,cut,gopt); } break; default: cerr << "malformed root tree draw spec treeid:varexp,selection,option"; for (int i=0; i<tokens->GetEntriesFast(); i++) cerr << i<<": "<< ((TObjString *)(*tokens)[i])->GetString() << " "; cerr << endl; break; } assert(tree->GetSelectedRows()); if (!pwg) pwg = new wGraph_t(); assert(pwg); pwg->gr = new TGraph(tree->GetSelectedRows(), tree->GetV2(), tree->GetV1()); } // fillGraphFromTreeVar