q1

【计算几何】线段相交

老子叫甜甜 提交于 2020-03-08 06:48:10
问题描述:已知两条线段P1P2和Q1Q2,判断P1P2和Q1Q2是否相交,若相交,求出交点。 两条线段的位置关系可以分为三类:有重合部分、无重合部分但有交点、无交点。 算法的步骤如下: 1.快速排斥实验。 设以线段P1P2为对角线的矩形为R,设以线段Q1Q2为对角线的矩形为T,如果R和T不相交,则两线段不相交。 2.跨立实验。 如果两线段相交,则两线段必然相互跨立对方。 若P1P2跨立Q1Q2,则矢量(P1-Q1)和(P2-Q1)位于矢量(Q2-Q1)的两侧,即 ( P1 - Q1 ) × ( Q2 - Q1 ) * ( P2 - Q1 ) × ( Q2 - Q1 ) < 0。 若Q1Q2跨立P1P2,则矢量(Q1-P1)和(Q2-P1)位于矢量(P2-P1)的两侧,即 ( Q1 - P1 ) × ( P2 - P1 ) * ( Q2 - P1 ) × ( P2 - P1 ) < 0。 排斥实验和跨立实验的示例如下图所示。 3.计算交点。 当判定两条线段相交后,可以进行交点的求解,求交点可以用平面几何方法,列点斜式方程来完成。但由于点斜式方程难以处理斜率为0的特殊情况,不方便求解。因而,参用向量法求解交点。 设交点为(x0,y0),则下列方程组成立: 根据以上方程组,消除参数k1和k2,得到如下方程: 然后求解(x0,y0),结果如下所示: 1 typedef struct

225.用队列实现栈

本秂侑毒 提交于 2020-02-03 03:09:15
1.可以用deque直接实现 2.用两个队列queue实现 3.一个queue实现 1 基本操作,push_front(),pop_front(),push_back(),pop_back() 2 两个队列 向q1中push元素,当要pop时,用一个辅助队列q2保存q1的前q1.size()-1个元素。然后再让q1=q2即可 class MyStack { public : /** Initialize your data structure here. */ queue < int > q1 ; queue < int > q2 ; MyStack ( ) { } /** Push element x onto stack. */ void push ( int x ) { q1 . push ( x ) ; } /** Removes the element on top of the stack and returns that element. */ int pop ( ) { q2 = queue < int > ( ) ; int ans ; while ( q1 . size ( ) > 1 ) { q2 . push ( q1 . front ( ) ) ; q1 . pop ( ) ; } ans = q1 . back ( ) ; q1 = q2 ;

STL-queue 队列

折月煮酒 提交于 2020-01-28 21:39:00
1 #include <iostream> 2 #include <queue> 3 4 using namespace std; 5 6 int main() 7 { 8 // queue也很简单 9 // push,pop,size,front 10 queue<int> q1; 11 q1.push(1); 12 q1.push(3); 13 q1.push(5); 14 cout<<q1.size()<<endl; 15 cout<<q1.front()<<endl; 16 // 不能访问队尾 17 //cout<<q1.tail()<<endl; 18 // 不反悔删除元素 19 //cout<<q1.pop()<<endl; 20 q1.pop(); 21 cout<<q1.front()<<endl; 22 cout<<q1.size()<<endl; 23 return 0; 24 } 来源: https://www.cnblogs.com/jishuren/p/12238908.html

[LeetCode] 225、用队列实现栈

五迷三道 提交于 2020-01-27 00:58:44
题目描述 用队列实现栈 参考代码 相似题目: [LeetCode] 232、用栈实现队列 ,简单题。 bool g_invalidInput = false ; class MyStack { public : /** Initialize your data structure here. */ MyStack ( ) { // nothing } /** Push element x onto stack. */ void push ( int x ) { if ( ! q1 . empty ( ) ) q1 . push ( x ) ; else q2 . push ( x ) ; } /** Removes the element on top of the stack and returns that element. */ int pop ( ) { if ( ! q1 . empty ( ) ) { int num = q1 . size ( ) ; while ( num != 1 ) { q2 . push ( q1 . front ( ) ) ; q1 . pop ( ) ; num -- ; } int res = q1 . front ( ) ; q1 . pop ( ) ; return res ; } else { int num = q2 . size

Luogu P3638 [APIO2013]机器人

我只是一个虾纸丫 提交于 2020-01-18 19:50:42
(类似)斯坦纳树+DP \(f[l][r][i][j]\) 表示已经构成 \([l,r]\) 的机器人,并在点 \((i,j)\) 的最小代价。 预处理出 \(d[i][j][k]\) 表示在点 \((i,j)\) 方向为 \(k\) 时最终能够到达的点。 \(f[l][r][i][j]=\min(f[l][k][i][j],f[k+1][r][i][j])\) \(枚举k,f[l][r][X][Y]=\min(f[l][r][X][Y],f[l][r][i][j]+1),(X,Y)表示(i,j,k)最终到达的点\) spfa 要优化:用两个队列,一个存初始状态(先排完序再扔进去),一个存扩展出来的状态,每次取两个队头中较小的去扩展。 #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<cstring> #define R register int using namespace std; namespace Luitaryi { inline int g() { R x=0,f=1; register char s; while(!isdigit(s=getchar())) f=s=='-'?-1:f; do x=x*10+(s^48);

用队列实现栈

我与影子孤独终老i 提交于 2020-01-17 18:30:41
题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 方法一: 用两个队列q1和q2实现栈,q1用来入栈,q2用来出栈,定义一个top用来标记栈顶元素。出栈时,将q1中的n-1个元素出栈,然后从q2入栈,最后将第n个元素出栈,交换两个队列的元素 class MyStack { Queue < Integer > q1 ; Queue < Integer > q2 ; int top ; /** Initialize your data structure here. */ public MyStack ( ) { q1 = new LinkedList < > ( ) ; q2 = new LinkedList < > ( ) ; } /** Push element x onto stack. */ public void push ( int x ) { top = x ; q1 . offer ( x ) ; } /** Removes the element on top of the stack and returns that element. */ public int pop ( ) { while ( q1 . size ( ) > 1 ) { top

编程之美Q1

∥☆過路亽.° 提交于 2019-12-03 10:32:22
题目 和数书页有点类似,就直接数吧 #include<iostream> using namespace std; class q1 { public: size_t func(size_t num); }; size_t q1::func(size_t num) { size_t count = 0, tmp; while(num) { tmp = num; while(tmp) { if(tmp%10 == 1) ++count; tmp = tmp/10; } --num; } return count; } int main() { q1 an; size_t num = 0; while(1) { cout<<"please input positive integer: "; cin>>num; cout<<num<<" to 0 include "<<an.func(num)<<" number 1 ."<<endl; } //num = 0xffffffff; //cout<<num<<" to 0 include "<<an.func(num)<<" number 1 ."<<endl; } 可循环输入,运行效果 问题2 来源: https://www.cnblogs.com/area-h-p/p/11791337.html

data.table row-wise sum, mean, min, max like dplyr?

匿名 (未验证) 提交于 2019-12-03 01:23:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: There are other posts about row-wise operators on datatable. They are either too simple or solves a specific scenario My question here is more generic. There is a solution using dplyr. I have played around but failed to find a an equivalent solution using data.table syntax. Can you please suggest an elegant data.table solution that reproduce the same results than the dplyr version? EDIT 1 : Summary of benchmarks of the suggested solutions on real dataset (10MB, 73000 rows, stats made on 24 numeric columns). The benchmark results is

二连杆机器人的动力学

匿名 (未验证) 提交于 2019-12-02 23:40:02
版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/tianjilieren/article/details/91419946 clc;clear;close; %syms L1 L2 m1 m2 g q1 q2 dq1 dq2 ddq1 ddq2 real Ts=0.01; L1=1; L2=1; m1=10; m2=10; ORI=[1 0 0;0 1 0;0 0 1]; q1=30*pi/180; q2=10*pi/180; g=-9.81; dq1=30*pi/180; dq2=30*pi/180; ddq1=40*pi/180; ddq2=5*pi/180; T12=[cos(q2) -sin(q2) 0 L2*cos(q2);sin(q2) cos(q2) 0 L2*sin(q2);0 0 1 0;0 0 0 1]; T01=[cos(q1) -sin(q1) 0 L1*cos(q1);sin(q1) cos(q1) 0 L1*sin(q1);0 0 1 0;0 0 0 1]; T23=eye(4,4); T={T01;T12;T23} V{1}=zeros(6,1); dV{1}=[0;0;0;0;g;0]; A1=[0;0;1;0;L1;0]; A2=[0;0;1;0;L2;0]; A={A1;A2}; dq=[dq1

用两个队列实现栈的操作

牧云@^-^@ 提交于 2019-12-02 15:06:39
public class MyStack<E> { private Queue<E> Q1=new LinkedList<>(); private Queue<E> Q2=new LinkedList<>(); public E push(E e){ if(Q1.isEmpty()&&Q2.isEmpty()){ Q1.add(e); } if(Q1.isEmpty()){ Q2.add(e); } if(Q2.isEmpty()){ Q1.add(e); } return e; } public E pop(){ if(Q1.isEmpty()&&Q2.isEmpty()){ try { throw new Exception("the stack is empty"); }catch (Exception e){ e.printStackTrace(); } } if(Q1.isEmpty()){ while (Q2.size()>1){ Q1.add(Q2.poll()); } return Q2.poll(); } if(Q2.isEmpty()){ while (Q1.size()>1){ Q2.add(Q1.poll()); } return Q1.poll(); } return null; } public E peek(){ if(Q1.isEmpty()&&Q2