Poj2919 Crane
挑战程序设计竞赛的一道题
最近刚学了三角变换。于是就构造了个矩阵,没想到正是向量旋转的矩阵(不知道具体叫什么qwq
然后网上一半的题解是左闭右开的,另一部分是懒标记的。
于是便自己yy了一个左闭右闭的线段树,方法和挑战程序设计竞赛是一样的。当然代码不是一样的
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
const double PI=3.1415926535897931;//M_Pi poj用不了
const int maxn=10101;
struct node
{
double x;
double y;
double dir;//右儿子旋转的角度
};
node T[maxn<<2];
int L[maxn];
double pre[maxn];
void build(int R,int l,int r)
{
T[R].dir=0;//多组数据,然后我就以为只有一组,遂wa了许多次
T[R].x=0;
T[R].y=0;
if(l==r)
{
T[R].y=L[l];
return ;
}
int mid=(l+r)>>1;
build(R<<1,l,mid);
build(R<<1|1,mid+1,r);
T[R].x=T[R<<1].x+T[R<<1|1].x;
T[R].y=T[R<<1].y+T[R<<1|1].y;
return ;
}
void change(int R,int l,int r,int s,double D)
{
if(s>r||s<l) return ;//所修改的向量不在当前区间
if(l==r)//正是一个点
{ //直接修改
double s=sin(D),c=cos(D),X=T[R].x,Y=T[R].y;
T[R].x=c*X-s*Y;
T[R].y=s*X+c*Y;
//printf("%lf,%lf",T[R].x,T[R].y);
return ;
}
int mid=(l+r)>>1,Ls=R<<1,Rs=R<<1|1;
change(Ls,l,mid,s,D);
change(Rs,mid+1,r,s,D);
if(s<=mid) T[R].dir+=D;//因为两端都是闭的,所以是大于等于号
double S=sin(T[R].dir),C=cos(T[R].dir);
T[R].x=T[Ls].x+(C*T[Rs].x-S*T[Rs].y);
T[R].y=T[Ls].y+(S*T[Rs].x+C*T[Rs].y);//一样的方法
return ;
}
int main()
{
//printf("%.16lf",PI);
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++) scanf("%d",&L[i]),pre[i]=PI;
build(1,1,n);
for(int i=1,a,b;i<=m;i++)
{
scanf("%d%d",&a,&b);
double D=1.0*b/180*PI;
change(1,1,n,a+1,D-pre[a+1]);
pre[a+1]=D;
printf("%.2lf %.2lf\n",T[1].x,T[1].y);
}
}
return 0;
}
Poj2919 Crane的更多相关文章
- 塔吊力矩限制器,塔吊黑匣子,塔吊电脑,tower crane
塔机力矩限制器,tower crane 适用于各种类型的固定臂塔机和可变臂塔机 塔机力矩限制器是塔式起重机机械的安全保护装置,本产品采用32位高性能微处理器为硬件平台,软件算法采用国内最先进的三滑轮取 ...
- Docker管理面板Crane开源了!
导读 数人云容器管理面板 Crane 开源啦!Crane 包含着数人云工程师对 Docker 最新技术的热爱和实践.希望借助开源社区的力量,让 Crane 完善自身,更好地成长起来,让更多的国内用户体 ...
- POJ 2991 Crane(线段树+计算几何)
POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...
- (中等) POJ 2991 Crane , 几何+线段树。
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- poj2991 Crane(线段树)
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- POJ 2991 Crane(线段树)
Crane Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7687 Accepted: 2075 Special J ...
- POJ 2991 Crane (线段树)
题目链接 Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of v ...
- 【27.22%】【poj2991】Crane
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5772 Accepted: 1571 Special Judge D ...
- POJ - 2991 Crane (段树+计算几何)
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
随机推荐
- <td>标签clospan和rowspan 可横跨列数和行数
<td colspan="2"> <input type="text" name="reason_other" size= ...
- Java Object类的equals()方法
所有类都从Object类中继承了equals方法,Object类中equals方法源代码如下: public boolean equals(Object obj) { retu ...
- 缓存与DB数据一致性问题解决的几个思路
使用缓存必然会碰到缓存跟真实数据不一致的问题,虽然我们会在数据发生变化时通知缓存,但是这个延迟时间内必然会导致数据不一致,如何解决一般有下面几个思路: 首先,当这个延迟如果在业务上时可以接受的,比如文 ...
- PHPStorm-Mintfy-And-Color-Schema
美化Php-storm 1.隐藏一些工具条 打开一个项目后我习惯把一些工具条隐藏,在view菜单中把Tool buttons,Status bar,Navigation bar. CTRL+E 切换当 ...
- [国家集训队2012]middle(陈立杰)
我是萌萌的传送门 我是另一个萌萌的传送门 脑残错误毁一下午…… 其实题解早就烂大街了,然而很久之前我只知道是二分答案+主席树却想不出来这俩玩意儿怎么一块儿用的……今天又翻了几篇题解才恍然大悟,是把权值 ...
- jQuery Callback函数的用法
在动画100%完成后,调用callback函数 语法如下 $(selector).hide(speed, callback); <!-- html部分 --> <button> ...
- 001Spring 定时任务 Scheduled
01.@Scheduled注解参数 @Scheduled支持fixedRate.fixedDelay.cron表达式参数.其中,fixedRate和fixedDelay没有区别,都是启动时执行1次,每 ...
- 封装一个MPermissionsActivity的思路和步骤
http://blog.csdn.net/longkehuawei/article/details/53202804 第一步:检测所有的权限是否都已授权 /** * 检测所有的权限是否都已授权 * * ...
- QT写hello world 以及信号槽机制
QT是一个C++的库,不仅仅有GUI的库.首先写一个hello world吧.敲代码,从hello world 写起. #include<QtGui/QApplication> #incl ...
- vue + element-ui 制作tab切换(切换vue组件,踩坑总结)
本篇文章使用vue结合element-ui开发tab切换vue的不同组件,每一个tab切换的都是一个新的组件. 1.vue如何使用element-ui 上一篇文章已经分享了如何在vue中使用eleme ...