題意:已知c(m,n)=m! / (n!*(m-n!)),輸入整p,q,r,s(p>=q,r>=s,p,q,r,s<=10000),計算c(p,q)/c(r,s)。輸出保證不超過10^8,保留5位小數
分析:初步分析,本題時間上基本上沒有太大的限制,可以暴力求解c(m,n);
但是我們會發現c(10000,5000),早已超出了計算機整數的表示範圍,不過輸出保證了不超過10^8,所以本題我們使用唯一分解定理進行求解,通過將其分解為指數冪次相乘的形式即可。
**如下:
//
//created by bluebuff 2016/1/11
//#pragma comment(linker,"/stack:102400000,102400000")
//#include
//#include
//#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //isstringstream
#include
#include
using
namespace
std;
//using namespace __gnu_pbds;
typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair pp;
#define rep1(i, a, b) for(int i = a; i < b; i++)
#define rep2(i, a, b) for(int i = a; i <= b; i++)
#define rep3(i, a, b) for(int i = a; i >= b; i--)
#define clr(a, b) memset(a, b, sizeof(a))
#define mp(x, y) make_pair(x,y)
template
inline
void getmax(t1 &a, t2 b)
template
inline
void getmin(t1 &a, t2 b) }}
rear = 0;
for(int i = 2; i < maxn; i++)
}}int e[maxn];
void add_integer(int n, int d)
if(n == 1) break;
}}void add_factorial(int n, int d)
}int main()
printf("%.5f\n", ans);
}}
uva213 優化演算法 紫書例題
注意,我的 和紫書 不一樣。首先來說一下我的 與紫書所給的 的區別。我的 不是對編碼頭做處理,而是對編碼資訊 也就是二進位制需解碼的資訊 進行處理,使其與編碼頭一一對應。怎麼說呢,我覺得我的 有思考的過程,我覺得有必要寫一下。思路 例子 編碼頭 abcdefghijklmn 我希望達成的目的是編碼頭...
紫書 例題 10 13 UVa 830(遞推)
首先我們按照這三個u的位置來分類,當前三個u在i,i 1,i 2。那麼先看三個u前面,前面不能有三個u,因為我們不能重複計算 那麼就是所有的組合減去有u的情況 為了敘述方便,我們設答案為f n 沒有三個u的方案數為 g n 那麼顯然g n 2的n次方 f n 然後我們看三個u後面,後面就任意了是2的...
紫書 例題8 2 UVa 11605(構造法)
這道題方法非常的巧妙,兩層的n n,第一層第i行全是第i個國家,第二層的第j列全是第j個國家。這樣能符合題目的條件。比如說第1個國家,在第一層的第一行全是a,然後在第二層的第一行就有abcde 這樣a就和所有的國家都連線了,其他國家也是一樣的。只能說這種方法非常巧妙吧,答案講出來很簡單,但是不容易想...