PKU 1942-Paths on a Grid

問題概要

組合せを求めろ.ただし入出力が32Bit非負整数に収まることは保証される.

解法

k=0の場合とk=1の場合のみ答えをそく返すようにしてTLEを防ぐ

実装(C++)

#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned int uint;
typedef long long lli;
lli comb(uint n,uint k){
	if(k==1)return n;
	if(k==0)return 1;
	if(k>n-k)return comb(n,n-k);
	lli res=1;
	bool ac[k];
	memset(ac,0,k);
	for(lli i=n;i>=n-k+1;i--){
		res*=i;
		for(lli i=1;i<=(int)k;i++){
			if(res%i==0&&ac[i-1]==false){
				res/=i;
				ac[i-1]=true;
			}
		}
	}

	return res;
}
int main() {
	uint x,y;
	while(cin>>x>>y){
		if(x==0&&y==0)break;
		cout<<comb(x+y,y)<<endl;
	}

	return 0;
}