題目位址
題意:你有乙個挖掘機,他的臂由n根小臂組成,最初的時候挖掘機的臂是垂直向上的,然後有n次操作,每次操作告訴你把第a和第a+1根臂之間的角度旋轉為b(不是旋轉角度為b),每次操作之後把最後那個臂的座標輸出
思路:用線段樹去維護每個臂的向量,然後把第a和第a+1個臂之間的角度旋轉為b這個操作就是將a+1到n個臂旋轉b-rad[a]就好了,最後輸出sum[1].x和sum[1].y就是最後那個臂的向量座標
吐槽一下:為什麼poj要卡g++的時間,搞得tle,還有自己太久沒有用c了居然有個地方忘了加&,re了乙個下午(浪費了乙個下午)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define n 10005
#define ll __int64
#define inf 0x3f3f3f3f
#define lson l,mid,ans<<1
#define rson mid+1,r,ans<<1|1
#define getmid (l+r)>>1
#define movel ans<<1
#define mover ans<<1|1
using
namespace
std;
const ll mod = 1e9 + 7;
const
double eps = 1e-8;
const
double pi = acos(-1.0);
struct node sum[n << 2];//線段樹主體
double rad[n];
void rotate(double &x, double &y, double r)
struct segment__tree
void pushdown(int ans)
}void build(int l, int r, int ans)
int mid = getmid;
build(lson);
build(rson);
pushup(ans);
}void updata(int l, int r, int ans, double nums)
pushdown(ans);
int mid = getmid;
if (midelse
if (mid >= y)
else
pushup(ans);
}};int main()
else flag = true;
tree.build(1, n, 1);
while (m--)
}return
0;}
POJ 2991 Crane(線段樹 計算幾何)
description 有一台起重機。我們把起重機看作由n條線段依次首尾相接而成。第i條線段的長度是li。最開始,所有的線段都筆直連線,指向上方。現有c條操縱起重機的指令。指令i給出兩個整數si和ai,效果是使線段si和si 1之間的角度變成ao度。其中角度指的是從線段si開始沿逆時針方向旋轉到si...
POJ 2991 Crane(區間更新 向量旋轉)
題目大意 n個向量首尾相連,每次操作使某個區間中的所有向量都旋轉同樣的角度。每次操作後都回答最後乙個向量的座標。題目分析 區間維護向量資訊。向量旋 x1 x0 cos t y0 sin t y1 x0 sin t y0 cos t 其中t為旋轉的角度。如下 include include inclu...
ACM Poj 2991 計算幾何 線段樹
題目鏈結。此題涉及到區間所有向量的同一角度旋轉,使用普通陣列維護會超時,因此我們使用線段樹維護,乙個節點維護該區間所有向量的和,最後我們的所求結果就是根節點所維護的向量和。關於線段樹講解可以見此部落格。include include define pi acos 1 using namespace ...