描述
孔明造出了木牛流马
木牛者,方腹曲头,一脚四足,头入领中,舌著于腹。载多而行少,宜可大用,不可小使;特行者数十里,群行者二十里也。曲者为牛头,双者为牛脚,横者为牛领,转者为牛足,覆者为牛背,方者为牛腹,垂者为牛舌,曲者为牛肋,刻者为牛齿,立者为牛角,细者为牛鞅,摄者为牛秋轴。牛仰双辕,人行六尺,牛行四步。载一岁粮,日行二十里,而人不大劳。流马尺寸之数,肋长三尺五寸,广三寸,厚二寸二分,左右同。前轴孔分墨去头四寸,径中二寸。前脚孔分墨二寸,去前轴孔四寸五分,广一寸。前杠孔去前脚孔分墨二寸七分,孔长二寸,广一寸。后轴孔去前杠分墨一尺五分,大小与前同。后脚孔分墨去后轴孔三寸五分,大小与前同。后杠孔去后脚孔分墨二寸七分,后载克去后杠孔分墨四寸五分。前杠长一尺八寸,广二寸,厚一寸五分。后杠与等版方囊二枚,厚八分,长二尺七寸,高一尺六寸五分,广一尺六寸,每枚受米二斛三斗。从上杠孔去肋下七寸,前后同。上杠孔去下杠孔分墨一尺三寸,孔长一寸五分,广七分,八孔同。前后四脚,广二寸,厚一寸五分。形制如象,靬长四寸,径面四寸三分。孔径中三脚杠,长二尺一寸,广一寸五分,厚一寸四分,同杠耳。(《三国志·亮集载作木牛流马法》)
可是在现实中它有个缺陷,就是两个不能在同一行或同一列!
孔明兴高采烈的叫庞统来参观,孔明存心想难一难庞统,他把k个木牛流马放在一个大的n*n的格子地板上,并且给他们都染上色,想让庞统帮着算算有多少种不同的合理布局情况?
格式
输入格式
第一行:n,k,h(h为有多少种颜色) n<=20
接下来h行为每种颜色多少个
输出格式
合理布局情况总数
样例1
样例输入1
4 4 1
4
样例输出1
24
提示
不需要高精度,并且孔明规定在格子地板上不能翻转,也就是说如果两种布局在翻转后是一样的仍算两种。
#include <iostream>
using namespace std;
int fac(int n);
int main()
{
int n, k, h;
long long ans;
int a[21];
cin >> n >> k >> h;//n<=20
for (int i = 0;i < h;i++)
cin >> a[i];
if (k <= n)
{
ans = 1;
for (int i = 0, j = n;i < k;i++, j--)
{
ans *= j;
}
ans = ans*ans;
for (int i = 0;i < h;i++)
ans /= fac(a[i]);
cout << ans << endl;
}
else
cout << "0" << endl;
return 0;
}
int fac(int n)
{
int f;
if (n == 1)
f = 1;
else
f = n*fac(n - 1);
return f;
}
本文介绍了一种基于孔明木牛流马模型的布局算法,该算法旨在计算不同颜色的木牛流马在特定网格上的合理布局数量。通过具体的样例输入输出展示算法实现过程。
399

被折叠的 条评论
为什么被折叠?



