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 ...
随机推荐
- zookeeper【6】负载均衡
负载均衡是一种手段,用来把对某种资源的访问分摊给不同的设备,从而减轻单点的压力. 架构图 图中左侧为ZooKeeper集群,右侧上方为工作服务器,下面为客户端.每台工作服务器在启动时都会去zookee ...
- css之子元素获取(未定义高度)父元素的高度
你可能碰到过这样的需求,一个高度不固定的区域(内容由用户创造),当鼠标经过该区域或者其神马操作时,需要出现一个与该区域一样大的模版: 我们用一个span来处理这个mask.由于 .sample-1 和 ...
- 7、srpingboot改变JDK版本
在pom.xml中加上 <plugin> <artifactId>maven-compiler-plugin</artifactId> <configurat ...
- untiy3d小工具——修改scene与prefab中的sprite
坑1:因为替换图片要获取所有包含image的组件,开始我使用的是gameobject.getComponents<Image>()和FindObjectsOfType<Image&g ...
- 关于iframe中使用fixed定位的一些问题
先来看看position: fixed:的定义:生成绝对定位的元素,相对于浏览器窗口进行定位: 但是在iframe中使用fixed定位,实际上是相对于iframe窗口进行定位,原因在于iframe类似 ...
- linux awk 使用的一个例子
1. 场景 从日志中获取漏发奖励的司机id 2. 日志 如下(需要获取一个时间段的 driverIdStr) ::-thread-] order.service.TOrderInfoServiceIm ...
- Python基础-列表生成式和生成器表达式
一.列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list ...
- Bootstrap + AngularJS+ Ashx + SQL Server/MySQL
去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQ ...
- apache2 tomat https 变成http的解决方案
1.apache2 设置 RequestHeader set X-Forwarded-Proto "https" 2.springboot 设置 server.tomcat.p ...
- Best Time to Buy and Sell Stock II--疑惑
https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/ 代码如下时能AC class Solution { publi ...