bzoj1089 SCOI2003 嚴格n元樹

2021-08-08 02:23:32 字數 3642 閱讀 1901

題目

遞推公式:f[i]=f[i-1]^n+1

當然,這樣看的話顯然long long是存不下的233。

要用高精度對吧,但是,我很懶呀。so,粘個模板吧。

//#include

//using namespace std;

//long long f[17];

//int n,d;

//long long ksm(long long a,long long b)

//// return ans;

//}//int main()

//#include

using

namespace

std;

#define maxn 9999

#define maxsize 10

#define dlen 4

class bignum

//建構函式

bignum(const

int); //將乙個int型別的變數轉化為大數

bignum(const

char*); //將乙個字串型別的變數轉化為大數

bignum(const bignum &); //拷貝建構函式

bignum &operator=(const bignum &); //過載賦值運算子,大數之間進行賦值運算

friend istream& operator>>(istream&, bignum&); //過載輸入運算子

friend ostream& operator

<<(ostream&, bignum&); //過載輸出運算子

bignum operator+(const bignum &) const; //過載加法運算子,兩個大數之間的相加運算

bignum operator-(const bignum &) const; //過載減法運算子,兩個大數之間的相減運算

bignum operator*(const bignum &) const; //過載乘法運算子,兩個大數之間的相乘運算

bignum operator/(const

int &) const; //過載除法運算子,大數對乙個整數進行相除運算

bignum operator^(const

int &) const; //大數的n次方運算

intoperator%(const

int &) const; //大數對乙個int型別的變數進行取模運算

bool

operator>(const bignum & t)const; //大數和另乙個大數的大小比較

bool

operator>(const

int & t)const; //大數和乙個int型別的變數的大小比較

void print(); //輸出大數

}; bignum::bignum(const

int b) //將乙個int型別的變數轉化為大數

a[len++] = d;

}bignum::bignum(const

char*s) //將乙個字串型別的變數轉化為大數

}bignum::bignum(const bignum & t) : len(t.len) //拷貝建構函式

bignum & bignum::operator=(const bignum & n) //過載賦值運算子,大數之間進行賦值運算

istream& operator>>(istream & in, bignum & b) //過載輸入運算子

b.a[count]=sum;

count++;

}b.len =count++;

return in;

}ostream& operator

<<(ostream& out, bignum& b) //過載輸出運算子

return out;

}bignum bignum::operator+(const bignum & t) const

//兩個大數之間的相加運算

} if(t.a[big] != 0)

t.len = big + 1;

else

t.len = big;

return t;

}bignum bignum::operator-(const bignum & t) const

//兩個大數之間的相減運算

else

big=t1.len;

for(i = 0 ; i < big ; i++)

else

t1.a[i] -= t2.a[i];

}t1.len = big;

while(t1.a[len - 1] == 0 && t1.len > 1)

if(flag)

t1.a[big-1]=0-t1.a[big-1];

return t1;

} bignum bignum::operator*(const bignum & t) const

//兩個大數之間的相乘運算

else

} if(up != 0)

ret.a[i + j] = up;

} ret.len = i + j;

while(ret.a[ret.len - 1] == 0 && ret.len > 1)

ret.len--;

return ret;

} bignum bignum::operator/(const

int & b) const

//大數對乙個整數進行相除運算

ret.len = len;

while(ret.a[ret.len - 1] == 0 && ret.len > 1)

ret.len--;

return ret;

}int bignum::operator %(const

int & b) const

//大數對乙個int型別的變數進行取模運算

return d;

}bignum bignum::operator^(const

int & n) const

//大數的n次方運算

m-=i;

ret=ret*t;

if(m==1)

ret=ret*(*this);

}return ret;

}bool bignum::operator>(const bignum & t) const

//大數和另乙個大數的大小比較

else

return

false;

}bool bignum::operator >(const

int & t) const

//大數和乙個int型別的變數的大小比較

void bignum::print() //輸出大數

cout

<< endl;

}int n,d;

bignum f[17];

int main()

f[d]=f[d]-f[d-1];

cout

0;}

模板真是長啊。。。。。

bzoj1089 嚴格n元樹

如果一棵樹的所有非葉節點都恰好有n個兒子,那麼我們稱它為嚴格n元樹。如果該樹中最底層的節點深度為d 根的深度為0 那麼我們稱它為一棵深度為d的嚴格n元樹。例如,深度為 的嚴格 元樹有三個,如下圖 給出n,d,程式設計數出深度為d的n元樹數目。僅包含兩個整數n,d 0 僅包含乙個數,即深度為d的n元樹...

bzoj1089 高精度 嚴格n元樹

description 如果一棵樹的所有非葉節點都恰好有n個兒子,那麼我們稱它為嚴格n元樹。如果該樹中最底層的節點深度為d 根的深度為0 那麼我們稱它為一棵深度為d的嚴格n元樹。例如,深度為 的嚴格 元樹有三個,如下圖 給出n,d,程式設計數出深度為d的n元樹數目。input 僅包含兩個整數n,d ...

BZOJ 1079 SCOI2008 著色方案

題目 分析 一看就覺得是dp或者直接排列組合公式或者容斥?我就只想到dp的,我們用dp i j 表示前i種顏色,排列出有j對相鄰一樣顏色的方案數。當出現乙個新的顏色時,我們把這個顏色插板法插進去,我們要列舉插入的方式,可能插到相鄰顏色一樣的中間,或者不是,然後進行狀態轉移.具體看 include i...