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;
}
コード例 #2
0
ファイル: strongAi.cpp プロジェクト: nbajiaoshi/Lota
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);
}
コード例 #3
0
ファイル: strongAi.cpp プロジェクト: nbajiaoshi/Lota
void player_ai(const PMap &map, const PPlayerInfo &info, PCommand &cmd)
{
    srand(time(0)); //随机开关打开
    cmd.cmds.clear();
    MAP = &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);
            }
        }
    }
}
コード例 #4
0
ファイル: Island Explorer.cpp プロジェクト: xywy1992/ACM-ICPC
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;
}
コード例 #5
0
//--------------------------------------------------------------------
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;
}
コード例 #6
0
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;
}
コード例 #7
0
ファイル: function.cpp プロジェクト: fuxiang90/code-fuxiang90
//点到直线距离,垂线距离
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;
}
コード例 #8
0
ファイル: Island Explorer.cpp プロジェクト: xywy1992/ACM-ICPC
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);
	}
コード例 #9
0
ファイル: KD_Tree.cpp プロジェクト: tzupengwang/PECaveros
 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);
   }
 }
コード例 #10
0
ファイル: Zinc.cpp プロジェクト: developerRJ/Hindustan-Zinc
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);
}