poj3845 Fractal(座標旋轉)

2021-08-09 03:59:21 字數 1591 閱讀 3668

傳送門

題意:

給一條折線,每一次操作把這條折線的所有線段變換成跟這條折線的相同形狀,重複d次。問此時從頭到尾走全長的f(0≤f≤1),將停在哪個點上。

題解:

首先計算出每次變換線段增長的倍數

k ,那麼線段會增長kd

若當前線段增長後已經超出了所剩餘的長度,就相當於確定變換後的直線在當前線段上,那麼遞迴k−

1 確定下一次變換的直線。

要注意每次變換後坐標需要旋轉,這個預處理就好了。

#include

#include

#include

#include

#include

using

namespace

std;

int t,n,d;

double res,ratio,totlen,lenall,powratio[15];

struct point

friend

inline point operator +(const point &a,const point &b)

friend

inline point operator -(const point &a,const point &b)

inline

double len()const

friend

inline point operator *(const point &a,const

double &o)

friend

inline point operator /(const point &a,const

double &o)

friend

inline

double

operator *(const point &a,const point &b)

inline point rev(double theta)

friend

inline

double calc(const point &a,const point &b)

}st,ls,to[150],p[150];

struct line

};double ang[150];

inline point dfs(line l,point s,int dnow,double theta,double t)

else res-=len,s=s+to[i].rev(theta)*t;

}return s;

}int main()

ratio=totlen/(lenall=((ls-st).len()));

cin>>d>>res;d--;

powratio[0]=1.0;

for(int i=1;ifor(int i=1;i<=d;i++)powratio[i]=powratio[i-1]*ratio;

res*=totlen*powratio[d];

point q=dfs(line(p[1],p[n]),st,d,0,1);

printf("(%.10f,%.10f)\n",q.x,q.y);

}}

Codeup3845括號解題報告(c語言)

題目描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 3 no no yes 這道題原理挺簡單,就是入棧,出棧匹配字元即可。需注意的是以下2個方面 1 括號順序不對,不匹...

POJ 1753 POJ 2965 解題報告

poj 1753 poj 2965 解題報告 poj 1753 和 poj 2965 是同一型別的題目,但是2965 有乙個比較簡單的方法來解決。poj 1753 我用的是打表的方法,打表很不厚道。思路 首先我們需要確定儲存的資料結構,從網上搜得用二進位制位來存,這確實是個很巧妙的方法,例如,我們將...

poj 3074 poj 3076(精確覆蓋)

兩個題都是數獨,題意很明確。建圖的思路大神寫的很好 行 一共9 9 9 729行。一共9 9小格,每一格有9種可能性 1 9 每一種可能都對應著一行。列 一共 9 9 9 9 81 324 種前面三個9分別代表著9行9列和9小 塊。乘以9的意思是9種可能,因為每種可能只可以選擇乙個。81代表著81個...