首页 > 代码库 > LightOJ-1005 组合数学,组合数水题
LightOJ-1005 组合数学,组合数水题
LightOJ 1005
题意:n*n的棋盘,放入k个车,要使k个车不相互攻击,有多少种方案。
总结:从n行选出k行(C(n,k)),再从n列选出k列(A(n,k)),即C(n,k)*A(n,k)。 注:纠结是C还是A,举个简单的例子,看交换后是否相同。
#include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f typedef long long ll; const int N = 1e5+10; double C(double n, double m) { double sum_n = 1, sum_m = 1; for(double i=n; i>=n-m+1; i--) sum_n *= i; for(double i=m; i>=1; i--) sum_m *=i; return sum_n/sum_m; } double A(double n, double m) { double sum_n = 1; for(double i=n; i>=n-m+1; i--) sum_n *= i; return sum_n; } int main() { int T; double n, k; cin>>T; FF(cas,1,T) { cin>>n>>k; printf("Case %d: %.0f\n", cas, C(n, k)*A(n, k)); } return 0; }
LightOJ-1005 组合数学,组合数水题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。