http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/T
题意:给你一束光,问你在一个三层的平面类传递n次的种数;
仔细想下,就是一个fibonacci数列;
#include<map> #include<set> #include<list> #include<cmath> #include<ctime> #include<deque> #include<stack> #include<bitset> #include<cstdio> #include<vector> #include<cstdlib> #include<cstring> #include<iomanip> #include<numeric> #include<sstream> #include<utility> #include<iostream> #include<algorithm> #include<functional> using namespace std ; vector<string> Fibs ; void CalFibs() { const int maxn = 10000 ; int carry , i , j , size1 , size2 , num1 , num2 ; string add1 , add2 ; add1 = '1' ; add2 = '2' ; Fibs.push_back( add1 ) ; Fibs.push_back( add2 ) ; for( int k = 3 ; k <= maxn ; ++k ) { string sum ; carry = 0 ; i = j = 0 ; size1 = add1.size() ; size2 = add2.size() ; while( i < size1 || j < size2 ) { if( i < size1 ) { num1 = add1[ i ] - '0' ; ++i ; } else { num1 = 0 ; } if( j < size2 ) { num2 = add2[ j ] - '0' ; ++ j ; } else { num2 = 0 ; } num1 += ( num2 + carry ) ; carry = num1 / 10 ; num1 %= 10 ; sum.push_back( num1 + '0' ) ; } if( carry ) { sum.push_back( carry + '0' ) ; } Fibs.push_back( sum ) ; add1 = add2 ; add2 = sum ; } } int main() { CalFibs() ; int n , i ; string result ; while( cin >> i ) { i += 2 ; result = Fibs[ i - 1 ] ; for( i = result.size() - 1 ; i >= 0 ; --i ) { cout << result[ i ] ; } cout << endl ; } return 0; }