傳送門
題意:
給一條折線,每一次操作把這條折線的所有線段變換成跟這條折線的相同形狀,重複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個...