#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define N (10010<<2)
#define maxn 10000
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pi acos(-1.0) int ang[N];
double x[N],y[N],len[maxn+]; void Rotate(int rt,double rad)
{
double s=x[rt],t=y[rt];
x[rt]=s*cos(rad)-t*sin(rad);
y[rt]=s*sin(rad)+t*cos(rad);
} double getrad(double x)
{
return x*pi/180.0;
} void PushDown(int rt)
{
if(ang[rt])
{
ang[rt<<]+=ang[rt];
ang[rt<<|]+=ang[rt];
double rad=getrad(ang[rt]);
ang[rt]=;
Rotate(rt<<,rad);
Rotate(rt<<|,rad);
}
} void PushUp(int rt)
{
x[rt]=x[rt<<]+x[rt<<|];
y[rt]=y[rt<<]+y[rt<<|];
} void build(int l,int r,int rt)
{
ang[rt]=;
if(l==r)
{
x[rt]=;
y[rt]=len[l];
return ;
}
int m=(l+r)>>;
build(lson);
build(rson);
PushUp(rt);
} void update(int p,int del,int l,int r,int rt)
{
if(l==r)
{
double rad=getrad(del);
Rotate(rt,rad);
return;
}
int m=(l+r)>>;
PushDown(rt);
if(p<=m)
{
double rad=getrad(del);
update(p,del,lson);
Rotate(rt<<|,rad);
ang[rt<<|]+=del;
}
else
update(p,del,rson);
PushUp(rt);
} int main(void)
{
int n,q;
int flag=;
int index,degree[maxn+],d;
while(~scanf("%d%d",&n,&q))
{
memset(degree,,sizeof(degree));
memset(ang,,sizeof(ang));/*旋转角度初始化为0,也就是一开始不旋转,这一步也可以放在build函数里面进行,不能遗漏*/
if(flag) puts("");
else flag=;
for(int i=; i<=n; i++)
scanf("%lf",len+i);
build(,n,);
while(q--)
{
scanf("%d%d",&index,&d);
d-=;
index++;/*index要先增加,然后再和degree[intdex]求旋转角度*/
int delta=d-degree[index];
degree[index]=d;
update(index,delta,,n,);
printf("%.2f %.2f\n",x[],y[]);
}
}
return ;
}

关于Rotae函数是这样理解的,更新时表示index+1段之后的线段绕index段末端点旋转delta度,x,y分别对应index+1之后的线段在x轴,y轴上投影。
根据x'=x*cos(rad)-y*sin(rad),y'=x*sin(rad)+y*cos(rad)可以将旋转后的投影算出来。

poj crane的更多相关文章

  1. POJ 2991 Crane(线段树+计算几何)

    POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...

  2. (中等) POJ 2991 Crane , 几何+线段树。

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  3. POJ 2991 Crane(线段树)

    Crane Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7687   Accepted: 2075   Special J ...

  4. POJ 2991 Crane (线段树)

    题目链接 Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of v ...

  5. AC日记——Crane poj 2991

    POJ - 2991 思路: 向量旋转: 代码: #include <cmath> #include <cstdio> #include <cstring> #in ...

  6. POJ - 2991 Crane (段树+计算几何)

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  7. POJ 2991–Crane【线段树+几何】

    题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...

  8. [poj 2991]Crane[线段树表示向量之和,而非数量]

    题意: 起重机的机械臂, 由n段组成, 对某一些连接点进行旋转, 询问每次操作后的末端坐标. 思路: 由于旋转会影响到该点之后所有线段的角度, 因此容易想到用线段树记录角度, 成段更新. (但是不是每 ...

  9. POJ 2991 Crane

    线段树+计算几何,区间更新,区间求和,向量旋转. /* *********************************************** Author :Zhou Zhentao Ema ...

随机推荐

  1. ubuntu系统安装redis

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串string,链表list,集 合set和有序集合zset.支持在服务器 ...

  2. 监听列表ListVIew的滑动状态

    /*监听列表的滑动状态:暂时用不到 * SCROLL_STATE_FLING 时让图片不显示,提高滚动性能让滚动小姑更平滑 * SCROLL_STATE_IDLE 时显示当前屏幕可见的图片*/ mLi ...

  3. hibernate篇章三-- hibernate配置文件hibernate.cfg.xml的详细解释

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...

  4. Think in java浏览一

    Think in java作为java语言的圣经书籍之一,几乎成为每个java程序员必看的书籍,不看都不好意思说自己是java程序员,不过一般也不说自己认真看了,就说自己翻了翻.作为写安卓的,当然也要 ...

  5. Installation error INSTALL_FAILED_VERSION_DOWNGRADE错误

    最近折腾了一下Robotium自动化测试框架,发现问题还挺多,刚刚解决了一个问题,总算是把环境搞定了,可是一运行测试用例,发现又报Installation error INSTALL_FAILED_V ...

  6. Angularjs中使用$location获取url参数时,遇到的坑~~~

    今天在开发时候,需要用到Angularjs1.4.6获取url参数,网上查了一下,有部分文章提到用$location来获取.大致方法如下 var app = angular.module('myApp ...

  7. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...

  8. bzoj1478:Sgu282 Isomorphism

    思路:由于题目中是通过改变点的编号来判断两种染色方案是否相同,而染色的确是边,于是考虑如何将点置换转化为边置换. 对于一个有n个点的完全图,其点置换有n!个(即全排列个数),又由于每一个边置换都对应了 ...

  9. 【BZOJ2793】【数学】[Poi2012]Vouchers

    Description 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个. 正整数中有m个数被标成了幸运数,问有哪些人取到了幸运数. ...

  10. sonar-maven-plugin问题

    问题: jenkins本地构建时sonar报错 StackOverflow问题 [ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven ...