A10242 | Robot Arm
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
Roger is a robot. He has an arm that is a series of $n$ segments connected to each other. The endpoints of the $i$ -th segment are initially located at points $(i-1,0)$ and $(i,0)$ . The endpoint at $(i-1,0)$ is colored red and the endpoint at $(i,0)$ is colored blue for all segments. Thus, the blue endpoint of the $i$ -th segment is touching the red endpoint of the $(i+1)$ -th segment for all valid $i$ .
Roger can move his arm in two different ways:
1. He can choose some segment and some value. This is denoted as choosing the segment number $i$ and picking some positive $l$ . This change happens as follows: the red endpoint of segment number $i$ and segments from $1$ to $i-1$ are all fixed in place. Imagine a ray from the red endpoint to the blue endpoint. The blue endpoint and segments $i+1$ through $n$ are translated $l$ units in the direction of this ray. In this picture, the red point labeled $A$ and segments before $A$ stay in place, while the blue point labeled $B$ and segments after $B$ gets translated.
2. He can choose a segment and rotate it. This is denoted as choosing the segment number $i$ , and an angle $a$ . The red endpoint of the $i$ -th segment will stay fixed in place. The blue endpoint of that segment and segments $i+1$ to $n$ will rotate clockwise by an angle of $a$ degrees around the red endpoint. In this picture, the red point labeled $A$ and segments before $A$ stay in place, while the blue point labeled $B$ and segments after $B$ get rotated around point $A$ .
Roger will move his arm $m$ times. These transformations are a bit complicated, and Roger easily loses track of where the blue endpoint of the last segment is. Help him compute the coordinates of the blue endpoint of the last segment after applying each operation. Note that these operations are cumulative, and Roger's arm may intersect itself arbitrarily during the moves.
Roger can move his arm in two different ways:
1. He can choose some segment and some value. This is denoted as choosing the segment number $i$ and picking some positive $l$ . This change happens as follows: the red endpoint of segment number $i$ and segments from $1$ to $i-1$ are all fixed in place. Imagine a ray from the red endpoint to the blue endpoint. The blue endpoint and segments $i+1$ through $n$ are translated $l$ units in the direction of this ray. In this picture, the red point labeled $A$ and segments before $A$ stay in place, while the blue point labeled $B$ and segments after $B$ gets translated.
2. He can choose a segment and rotate it. This is denoted as choosing the segment number $i$ , and an angle $a$ . The red endpoint of the $i$ -th segment will stay fixed in place. The blue endpoint of that segment and segments $i+1$ to $n$ will rotate clockwise by an angle of $a$ degrees around the red endpoint. In this picture, the red point labeled $A$ and segments before $A$ stay in place, while the blue point labeled $B$ and segments after $B$ get rotated around point $A$ .
Roger will move his arm $m$ times. These transformations are a bit complicated, and Roger easily loses track of where the blue endpoint of the last segment is. Help him compute the coordinates of the blue endpoint of the last segment after applying each operation. Note that these operations are cumulative, and Roger's arm may intersect itself arbitrarily during the moves.
输入格式
The first line of the input will contain two integers $n$ and $m$ ( $1<=n,m<=300000$ ) — the number of segments and the number of operations to perform.
Each of the next $m$ lines contains three integers $x_{i}$ , $y_{i}$ and $z_{i}$ describing a move. If $x_{i}=1$ , this line describes a move of type $1$ , where $y_{i}$ denotes the segment number and $z_{i}$ denotes the increase in the length. If $x_{i}=2$ , this describes a move of type 2, where $y_{i}$ denotes the segment number, and $z_{i}$ denotes the angle in degrees. ( $1<=x_{i}<=2,1<=y_{i}<=n,1<=z_{i}<=359$ )
Each of the next $m$ lines contains three integers $x_{i}$ , $y_{i}$ and $z_{i}$ describing a move. If $x_{i}=1$ , this line describes a move of type $1$ , where $y_{i}$ denotes the segment number and $z_{i}$ denotes the increase in the length. If $x_{i}=2$ , this describes a move of type 2, where $y_{i}$ denotes the segment number, and $z_{i}$ denotes the angle in degrees. ( $1<=x_{i}<=2,1<=y_{i}<=n,1<=z_{i}<=359$ )
输出格式
Print $m$ lines. The $i$ -th line should contain two real values, denoting the coordinates of the blue endpoint of the last segment after applying operations $1,...,i$ . Your answer will be considered correct if its absolute or relative error does not exceed $10^{-4}$ .
Namely, let's assume that your answer for a particular value of a coordinate is $a$ and the answer of the jury is $b$ . The checker program will consider your answer correct if  for all coordinates.
Namely, let's assume that your answer for a particular value of a coordinate is $a$ and the answer of the jury is $b$ . The checker program will consider your answer correct if  for all coordinates.
输入输出样例
输入 #1
5 4 1 1 3 2 3 90 2 5 48 1 4 1
输出 #1
8.0000000000 0.0000000000 5.0000000000 -3.0000000000 4.2568551745 -2.6691306064 4.2568551745 -3.6691306064
The following pictures shows the state of the arm after each operation. The coordinates of point $F$ are printed after applying each operation. For simplicity, we only show the blue endpoints of a segment (with the exception for the red endpoint of the first segment). For instance, the point labeled $B$ is the blue endpoint for segment $1$ and also the red endpoint for segment $2$ .
Initial state:
 Extend segment $1$ by $3$ .  Rotate segment $3$ by $90$ degrees clockwise.  Rotate segment $5$ by $48$ degrees clockwise.  Extend segment $4$ by $1$ . 
Initial state:
 Extend segment $1$ by $3$ .  Rotate segment $3$ by $90$ degrees clockwise.  Rotate segment $5$ by $48$ degrees clockwise.  Extend segment $4$ by $1$ . 
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted