알고리즘/JM북

p312 드래곤 커브

quantdave 2017. 2. 13. 18:47

#include<iostream>

using namespace std;



long long length[51];

void precalc()

{

length[0] = 1;

for(int i = 1; i<=50; i++)

{

length[i] = length[i-1]*2 +2;

}

}

const string X = "X+YF";

const string Y = "FX-Y";

char expand(const string& dragonCurve, int generations, int skip)

{

if(generations == 0)

{

return dragonCurve[skip];

}


for(int i = 0 ; i  < dragonCurve.size(); i++)

{

if(dragonCurve[i] == 'X' || dragonCurve[i] =='Y'){

if(skip>=length[generations])

skip -= length[generations];

else if(dragonCurve[i] == 'X')

{

return expand(X, generations-1, skip);

}

else if(dragonCurve[i] =='Y')

{

return expand(Y, generations-1,skip);

}

}

else if(skip>0)

--skip;

else

return dragonCurve[i];

}


return '#';

}


int main()

{

string t;

int C, a,b,c;

cin>>C;

precalc();

while(C--)

{

cin>>a>>b>>c;

for(int i=b; i<=b+c-1; i++)

{

string org = "FX+YF";

cout<<expand(org,a,i-1);

}

cout<<endl;

}

}


'알고리즘 > JM북' 카테고리의 다른 글

p270 두니발 박사의 탈옥  (0) 2017.02.13
264p 폴리노미오  (0) 2017.02.13
156p 소풍  (0) 2017.02.05
149p 조합 찾기  (0) 2017.02.05
2장 p30 사탕 나눠주기  (0) 2017.01.30