home_W 购买了一台新的起重机。起重机由各种长度的n个段组成,段之间通过柔性关节连接。第i个分段的尾部连接到第i + 1个分段的头部,1≤i<n。第一段的头部固定在坐标(0,0)的点处,并且其尾部在坐标(0,w)的点处,其中w是第一段的长度。所有的段总是位于一个平面中,并且关节可以在该平面中的任意旋转。在发生了一系列令人不快的事故后,home_W 决定控制起重机的软件必须包含一段代码,用于不断检查起重机末端的位置,如果碰撞发生,停止起重机。
你的任务是写这个软件的一部分,确定每个命令后第n段尾部的位置。起重机的状态由相邻段之间的角度确定。最初,所有相邻段之间的角度都是直的,即180°。操作者每次发出的命令仅改变其中一个关节的角度
输入由多组样例组成,由单个空行分隔。
每个实例的第一行由两个整数1≤n≤10000和c<=20000 组成 - 起重机的段数和命令数。 第二行由用单个空格分隔的n个整数l1,...,ln(1<=li<=100)组成,起重机的第i段的长度为li。 接下来c行是操作员的命令。 描述命令的每一行由两个整数s和a(1≤s<n,0≤a≤359)组成 -,代表将第s个和第s + 1个段之间的角度改成a度 (从s到第s + 1段间的逆时针角度)。
每个案例的输出由C行组成。每行由单个空格分隔的两个有理数x和y组成 - 代表第i个命令后的第n个段的尾部的坐标,四舍五入到小数点后两位。(误差不超过0.01就算正确)
每两个连续案例的输出必须由一个空行分隔。
2 1 10 5 1 90 3 2 5 5 5 1 270 2 90 10 1 2 8 5 1 10 5 9 9 3 5 3 305
5.00 10.00 -10.00 5.00 -5.00 10.00 -34.40 -9.09