int main(){ std::default_random_engine gen(std::chrono::system_clock::now().time_since_epoch().count()); std::uniform_int_distribution<int> dis1(0,3); std::uniform_int_distribution<int> dis2(0,100); Queue q1; std::queue<int> q2; int m = 1000000; for(int i=0;i<m;++i){ if(q1.empty()!=q2.empty()){ cout<<"incorrect"<<endl; break; } if(q1.empty() || dis1(gen)<2){ int v = dis2(gen); q1.push(v); q2.push(v); }else{ if(q1.peek()!=q2.front()){ cout<<"incorrect"<<endl; break; } q1.pop(); q2.pop(); } } return 0; }
void fighting(const PUnit* a, const PUnit* b, PCommand &cmd) //单位a对单位b发起进攻 { Operation op; op.id = a->id; vector<const PSkill*> useSkill; for (int i = 0; i < a->skills.size(); ++i) { const PSkill* ptr = &a->skills[i]; if (ptr->isHeroSkill() && a->canUseSkill(ptr->typeId)) { PUnits ptr_foe; infectedBySkill(*INFO, a->id, ptr->typeId, ptr_foe); //寻找可用技能 if (belongs(b->id, ptr_foe) || !strcmp(ptr->name,"Hide") || !strcmp(ptr->name,"PowerUp")) useSkill.push_back(ptr); } } if (useSkill.size()) //策略:优先使用技能 { const PSkill* ptr = useSkill[rand()%useSkill.size()]; op.type = ptr->name; if (ptr->needTarget()) op.targets.push_back(b->pos); } else if (dis2(a->pos, b->pos) <= a->range) //判断单位b是否在攻击范围内 { op.type = "Attack"; op.targets.push_back(b->pos); } else { op.type = "Move"; findShortestPath(*MAP, a->pos, b->pos, blocks, op.targets); } cmd.cmds.push_back(op); }
void player_ai(const PMap &map, const PPlayerInfo &info, PCommand &cmd) { srand(time(0)); //随机开关打开 cmd.cmds.clear(); MAP = ↦ INFO = &info; if (info.round == 0) { chooseHero(info, cmd); //第0回合选择英雄 init(); //一些参数初始化 } else //正式回合 { info.findUnitByPlayer(info.player, ours); //寻找所有本方单位 for (int i=0; i<ours.size(); ++i) //所有己方单位 { const PUnit* ptr = ours[i]; if (ptr->isHero()) //ptr是一个英雄,不和队友配合,单独作战 { const Pos* tower = INFO->camp ? Player0_tower_pos : Player1_tower_pos; for (int i = 0; i < 2; ++i) if (dis2(ptr->pos, tower[i]) < 100 && !info.findUnitByPos(tower[i])) towerDes[i] = true; //去除已摧毁防御塔 fightAlone(ptr, info, cmd); } } } }
int ts(int x, int l, int r) { while (r - l > 1) { int m1 = (l + r) / 2; double d1 = dis2(p1[x], p2[m1]); int m2 = (m1 + r) / 2; double d2 = dis2(p1[x], p2[m2]); if (d1 < d2) { r = m2; } else { l = m1; } } double d1 = dis2(p1[x], p2[l]); double d2 = dis2(p1[x], p2[r]); return d1 < d2 ? l : r; }
//-------------------------------------------------------------------- void dice(int ots) { if(ots>=1&&ots<=6)//deturmans if onetosix is a valid dise size { dis1();// ----- switch (ots) { case 1: // ----- dis5();//| | dis6();//| * | dis5();//| | // ----- break; case 2: // ----- dis3();//|* | dis5();//| | dis4();//| *| // ----- break; case 3: // ----- dis3();//|* | dis6();//| * | dis4();//| *| // ----- break; case 4: // ----- dis2();//|* *| dis5();//| | dis2();//|* *| // ----- break; case 5: // ----- dis2();//|* *| dis6();//| * | dis2();//|* *| // ----- break; case 6: // ----- dis2();//|* *| dis2();//|* *| dis2();//|* *| // ----- break; default: dis1();// ----- } dis1(); cout<<endl; } else cout<<"Not a valid side"<<endl; }
SudokuFile& SudokuBoardGenerator::generateBoard(int N, int p, int q, int numAssignments, long timeout) { //given a SudokuFile with N, P, Q, creates a board with the given params //and assigns it to the board of the SudokuFile. //timeout represents the time in ms allowed to created the SudokuFile SudokuFile sf = SudokuFile(N, p, q); std::vector<std::vector<int>> tempBoard = sf.getBoard(); if (numAssignments > sf.getN()*sf.getN()) { std::cout << "Number of assignments exceeds available spaces in board. Returning SudokuFile with an empty board" << std::endl; return sf; } std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis1(0, sf.getN() - 1); std::uniform_int_distribution<> dis2(1, sf.getN()); auto startTime = std::chrono::high_resolution_clock::now(); for (int i = 0; i < numAssignments; i++) { int randomRow = dis1(gen); //0 to N-1 int randomColumn = dis1(gen); //0 to N-1 int randomAssignment = dis2(gen); //1 to N if (tempBoard[randomRow][randomColumn] == 0 && checkConstraints(randomRow, randomColumn, randomAssignment, sf, tempBoard)) { tempBoard[randomRow][randomColumn] = randomAssignment; } else { i--; auto currentTime = std::chrono::high_resolution_clock::now(); if (std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - startTime).count() > timeout) { std::cout << "Timeout at " << i << " elements" << std::endl; std::vector<std::vector<int>> tempboard; break; } } } sf.setBoard(tempBoard); retBoard = tempBoard; return sf; }
//点到直线距离,垂线距离 double dis2line(double x, double y, const giroadnode *u, const giroadnode *v) { double upx, upy, uvx, uvy; double det, a, h; upx = x - u->x; upy = y - u->y; uvx = v->x - u->x; uvy = v->y - u->y; det = upx*uvy - upy*uvx; //叉乘的膜 |a X b| = |a|*|b|*sin<a,b> a = dis2(u, v); h = det/a; return h; }
int main() { scanf("%d", &T); for (int t = 1; t <= T; ++t) { scanf("%d %d", &n, &m); scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &a.F, &a.S, &b.F, &b.S, &c.F, &c.S, &d.F, &d.S); init(t1, n, p1, a, b); init(t2, m, p2, c, d); e.clear(); for (int i = 1; i < n; ++i) { e.PB(MP(dis2(p1[i - 1], p1[i]), MP(i - 1, i))); } for (int i = 1; i < m; ++i) { e.PB(MP(dis2(p2[i - 1], p2[i]), MP(n + i - 1, n + i))); } for (int i = 0; i < n; ++i) { int p = ts(i, 0, m - 1); e.PB(MP(dis2(p1[i], p2[p]), MP(i, n + p))); if (p - 1 >= 0) { e.PB(MP(dis2(p1[i], p2[p - 1]), MP(i, n + p - 1))); } if (p + 1 < m) { e.PB(MP(dis2(p1[i], p2[p + 1]), MP(i, n + p + 1))); } } std::sort(e.begin(), e.end()); ds.init(n + m); double mst = 0; FOR(i, e) { int u = (*i).S.F, v = (*i).S.S; if (ds.setp(u, v)) { mst += sqrt((*i).F); } } printf("Case #%d: %.3lf\n", t, mst); }
void nearest(Node* r, int x, int y, int &mID, LL &md2){ if (!r || !touch(r, x, y, md2)) return; LL d2 = dis2(r->x, r->y, x, y); if (d2 < md2 || (d2 == md2 && mID < r->id)) { mID = r->id; md2 = d2; } // search order depends on split dim if ((r->f == 0 && x < r->x) || (r->f == 1 && y < r->y)) { nearest(r->L, x, y, mID, md2); nearest(r->R, x, y, mID, md2); } else { nearest(r->R, x, y, mID, md2); nearest(r->L, x, y, mID, md2); } }
void dis(long ecode) { ifstream file("bill.txt",ios::binary); client ob1,ob2; int c=0,bill=0; fflush(stdin); while(file.read((char*)&ob1,sizeof ob1)) { if(ecode==ob1.getcode()&&ob1.get()!=0) { ob2=ob1; c++; } } file.close(); ob2.dis1(); bill=ob2.get(); if(c>1) { fflush(stdin); file.open("bill.txt",ios::in|ios::binary); int i=1; while(file.read((char*)&ob1,sizeof ob1)) { if(ecode==ob1.getcode()&&ob1.get()!=0) { if(i<=(c-1)) { i++; ob1.print(); bill+=ob1.get(); } } } } dis2(bill); }