Sicily 1029 Rabbit
1366 ワード
タイトル:http://soj.me/1029
最初は大人のウサギのペアがいましたが、大人のウサギは月に一ペアずつ赤ちゃんを産むことができます。mとd(m==10、d==100)を与えます。mは赤ちゃんのウサギはmヶ月後に大人になり、dヶ月後にどれぐらいのウサギがいるかを聞きました。
アルゴリズムの実現:mとdは小さいので、直接シミュレーションできます。num[0]は大人のウサギの数を表し、num[i]はiヶ月の大人のウサギの数を表しています。d回num配列を更新すればいいです。最後の総数は大きいかもしれないので、高精度の方法を使います。
具体的なコード:
最初は大人のウサギのペアがいましたが、大人のウサギは月に一ペアずつ赤ちゃんを産むことができます。mとd(m==10、d==100)を与えます。mは赤ちゃんのウサギはmヶ月後に大人になり、dヶ月後にどれぐらいのウサギがいるかを聞きました。
アルゴリズムの実現:mとdは小さいので、直接シミュレーションできます。num[0]は大人のウサギの数を表し、num[i]はiヶ月の大人のウサギの数を表しています。d回num配列を更新すればいいです。最後の総数は大きいかもしれないので、高精度の方法を使います。
具体的なコード:
#include
#include
#include
#include
#define get_max(a,b) ((a)>(b)?(a):(b))
using namespace std;
const int maxn=200;
struct bign
{
int len,s[maxn];
bign()
{
memset(s,0,sizeof(s));
len=1;
}
bign(int num)
{
*this=num;
}
bign operator = (const char *num)
{
len=strlen(num);
for(int i=0;i>m>>d)
{
if(m==0&&d==0) break;
num[0]=1;//num[0]
for(int i=1;i<=m;i++)
num[i]=0;//num[i] i
for(int i=1;i<=d;i++)
{
num[0]=num[0]+num[1];
for(int i=1;i