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 ...
随机推荐
- 对Mybatis的初步认识
1.认识Mybatis MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBat ...
- MVC 控制器中直接访问url 的方式
public void ShowDetailsImg() { //生成MD5码 string path = @"D:\其他\Test\WebApplication2\WebApplicati ...
- 子级用css float浮动 而父级不能自适应高度解决方法
解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个 ...
- rocketmq 两个线程同时消费一个消息
1.问题描述 线上项目A部署两台机器,每台机器两个实例,订阅同一个topic,消费心跳数据. (两台机器host1,host2) 运维同事 部署时 有一个实例用root账户重启的, 然后该实例出现两个 ...
- angular之$on、$emit、$broadcast
1.$scope.$on view事件 //View被加载但是DOM树构建之前时: $scope.$on('$viewContentLoading', function(event, viewConf ...
- filter() 方法创建一个新数组
filter快速过滤创建一个新数组 var new_array = arr.filter(callback(element[, index[, array]])[, thisArg]) 参数节 cal ...
- easyui window窗口 随body的滚动条 滚动
问题描述: 当easyui window窗口弹出的时候,依然可以滚动body 的滚动条,而且window窗口也会随它一起滚动 思路:bootstrap 模态框弹出的时候,给body 添加了 .moda ...
- AdobeCS3DesignPremiumChs_Greendown.cn使用注册机激活失败重新激活操作方法
解决Adobe Acrobat 9 Pro序列号无效/重新激活方法 1.删除C:\Program Files\Common Files\Adobe\Adobe PCD\cache\cache.db和C ...
- scp 上传和下载文件
mac和linux自带scp命令,windows的话请考虑gitbash或者专业linux工具 (默认端口为22,所以-p可不写) 上传文件 scp -p /home/lnmp.gz root@ip: ...
- 【Leetcode】【Medium】Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...