1.长方体
长*宽*高即可 打卡题
2.翻倍
懒得写,直接附上大佬思路
附代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
typedef long long LL;
using namespace std;
int main()
{
int T;
cin >> T;
while (T -- )
{
int a, b;
scanf("%d%d", &a, &b);
int t = round(pow((LL)a * b, 1.0 / 3.0)); // 防止出现精度问题
// int t = pow((LL)a * b, 1.0 / 3.0) + 1e-8; 另一种方法
if ((LL)t * t * t == (LL)a * b && a % t == 0 && b % t == 0)
puts("Yes");
else
puts("No");
}
return 0;
}
3.数量
dfs加去假排列
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
bool st[5];
LL C (int a, int b)
{
LL res = 1;
for (int i = a, j = 1; j <= b; i --, j ++ )
{
res = res * i / j;
}
return res;
}
int dfs(int u, int n)
{
if (u > n) return 1;
int res = 0;
for (int i = 1; i <= n; i ++ )
{
if (i != u && !st[i])
{
st[i] = true;
res += dfs(u + 1, n);
st[i] = false;
}
}
return res;
}
int main()
{
int n, k;
cin >> n >> k;
LL res = 0;
for (int i = 2; i <= k; i ++ )
res += C(n, i) * dfs(1, i);
cout << res << endl;
return 0;
}