int Solve(vector<vector<pii> >& __ans,int m,vector<int> input){
     int tst = input.size(),t = 0,N= 0;
     for(int i = 0; i < tst; i++){
         int value = input[i];
         allocat(N,value);
         N += value;
     }
     solve(m,N);
     __ans.resize(col);
     for(int i = 0; i < col; i++){
         for(int j = 0; j < m; j++){
             __ans[i].push_back(ans[i][j]);
         }
     }
     return 1;
 }
 int Solve(vector<vector<pii> >& __ans,int loc_coln,vector<int> input){
     coln = loc_coln;
     int t = 0,myn = 0;
     base = 0;
     int tst = input.size();
     for(int i = 0; i < tst; i++){
         int value = input[i];
         myn += value/2;
         // 使用固定轮转法确定比赛
         allocat(base,value);
         base += value;
     }
     tight_col = 0;
     if(coln < 3) tight_col = 1;
     if(coln == 3 && base == 8) tight_col = 1;
     cntn = base;
     int sum = 0;
     for(int i = 0; i < len; i++) sum += ANS[i].size();
     tmpn = min(coln,myn);
     rown = sum / tmpn + !!(sum % tmpn);
     TMP = !!((cntn-1) % coln) * rown;
     bool myflag = 0;
     for( EPS = 2;; EPS++){
         // 逐步放宽EPS值的限制
         memset(conf,0,sizeof(conf));
         flag = 0;
         init();
         if(!myflag) best = 10000;
         dfs(0,0,0);
         if(myflag) break;
         if(best != 10000) {
             if(flag || best == TMP) break;
             else myflag = 1;
         }
     }
     __ans.resize(rown);
     for(int i = 0; i < rown; i++){
         for(int j = 0; j < coln; j++){
             __ans[i].push_back(last_ans[i][j]);
         }
     }
     return 1;
 }
Ejemplo n.º 3
0
int main(int argc, char* argv[])
{
    std::shared_ptr<Empty> blank;
    std::shared_ptr<Program> prg(new Program());

    std::shared_ptr<SharedDecl> shDecl1(new SharedDecl("y", blank));
    prg->Add(shDecl1);

    std::shared_ptr<Node> initX(new Atom("2"));
    std::shared_ptr<SharedDecl> shDecl2(new SharedDecl("x", initX));
    prg->Add(shDecl2);

    std::shared_ptr<Sub> sub1(new Sub("Main"));
    sub1->AddParam("a");
    sub1->AddParam("b");
    prg->Add(sub1);

    std::shared_ptr<Atom> atomA(new Atom("a"));
    std::shared_ptr<Atom> atomB(new Atom("b"));
    std::shared_ptr<BinaryOp> initRes(new BinaryOp("add", atomA, atomB));
    std::shared_ptr<VarDecl> resDecl(new VarDecl("res", initRes));
    sub1->Add(resDecl);

    std::shared_ptr<Atom> atom3i(new Atom("3"));
    std::shared_ptr<Atom> atom5i(new Atom("5"));
    std::shared_ptr<BinaryOp> newParam(new BinaryOp("add", atom3i, atom5i));
    std::shared_ptr<Allocation> allocat(new Allocation(newParam));
    std::shared_ptr<Atom> atomArr(new Atom("arr"));
    std::shared_ptr<Assignation> asignNew3(new Assignation(atomArr, allocat));
    sub1->Add(asignNew3);

    std::shared_ptr<Atom> atomArrBis(new Atom("arr"));
    std::shared_ptr<Deallocation> deallocat(new Deallocation(atomArrBis));
    sub1->Add(deallocat);

    std::shared_ptr<Atom> atomC(new Atom("res"));
    std::shared_ptr<BinaryOp> subCsumAB(new BinaryOp("substract", atomC, initRes));
    std::shared_ptr<Assignation> incC(new Assignation(atomC, subCsumAB));
    sub1->Add(incC);

    std::shared_ptr<Atom> atom0(new Atom("0"));
    std::shared_ptr<BinaryOp> cond1cond(new BinaryOp("equals", atomC, atom0));
    std::shared_ptr<If> cond1(new If(cond1cond, "10", "20"));
    sub1->Add(cond1);

    std::shared_ptr<Atom> atom1(new Atom("1"));
    std::shared_ptr<Atom> atom10(new Atom("10"));
    std::shared_ptr<For> for1(new For("i", atom1, atom10, atom1));
    sub1->Add(for1);

    std::shared_ptr<BinaryOp> addC1(new BinaryOp("add", atomC, atom1));
    std::shared_ptr<Assignation> incResActually(new Assignation(atomC, addC1));
    for1->Add(incResActually);

    std::shared_ptr<Loop> loop1(new Loop(cond1cond));
    loop1->Add(for1); // don't double reference ever in practice...
    loop1->Add(addC1);
    sub1->Add(loop1);

    std::shared_ptr<Call> call1(new Call("testFun", ""));
    call1->AddParam(atomA);
    call1->AddParam(addC1);
    sub1->Add(call1);

    std::shared_ptr<Return> ret1(new Return(atom0));
    sub1->Add(ret1);

    XMLDumpVisitor v;
    prg->Accept(&v);

    return 0;
}