// #define NDEBUG //切换release和debug版本 #include #include #include #include #include using ull = unsigned long long; template struct Array{ constexpr Array(){}; constexpr Array(const std::initializer_list list){ std::copy(list.begin(),list.end(),arr); } #ifdef NDEBUG #define NDB_NOEXCEPT noexcept #define NDB_CONSTEXPR constexpr #else #define NDB_NOEXCEPT #define NDB_CONSTEXPR #endif NDB_CONSTEXPR T& operator[](const size_t n)NDB_NOEXCEPT{ // static_assert(noexcept(Array::operator[](0)), "isn't noexcept"); #ifndef NDEBUG if(n>=size){ std::ostringstream err_oss; err_oss<<"\n[array_size]: "<now!=that.now; } NDB_CONSTEXPR T& operator*()const NDB_NOEXCEPT{ #ifndef NDEBUG if(now>=size){ std::ostringstream err_oss; err_oss<<"[array_size]: "<,max_n> c,prefix; static void init(){ c[0][0] = c[1][0] = c[1][1] = 1; for(ull i {2};i struct ReadNumber{ ReadNumber& operator>>(T &num){ c=0,w=1,n=0; while(!isdigit(c)){ if constexpr (!std::is_unsigned_v){ if(c=='-')w=-1; } c=getchar(); } while(isdigit(c)){ n=n*10+(c-'0'); c=getchar(); } num = w*n; return *this; } private: char c; T w,n; }; ReadNumber readull; int main(){ readull>>t>>k; // std::cout<>n>>m; // std::cout<<"test\n"; m = std::min(m,n); std::cout<<(prefix[n][m])<<'\n'; } }