链接:https://ac.nowcoder.com/acm/contest/5633/A
来源:牛客网
示例1
输入
3
6 7 8
1 2 2
6 0 3
输出
504
0
0
备注:
1
<
=
t
<
=
200000
{1<=t<=200000}
1<=t<=200000
0
<
=
n
,
m
,
k
<
=
10000
{0<=n,m,k<=10000}
0<=n,m,k<=10000
其实这道题的意思是一个数组,如何排列使得1412这样的子序列最多。
首先如果要求142的方案数,那么答案应该是
n
∗
m
∗
k
n*m*k
n∗m∗k。
现在要求求1412,那么先特判一下0 的情况,那么对于样例6 7 8,肯定是111444444411122222222,因为1 有两处需要,所以尽量平均分配这样排列的数最多,所以答案应该是:
(
n
/
2
)
∗
(
n
−
n
/
2
)
∗
m
∗
k
(n/2)*(n-n/2)*m*k
(n/2)∗(n−n/2)∗m∗k,注意开
l
o
n
g
l
o
n
g
long\ long
long long
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<queue>
#include<unordered_map>
#define ls (p<<1)
#define rs (p<<1|1)
#pragma GCC optimize (2)
#pragma G++ optimize (2)
#define over(i,s,t) for(register int i = s;i <= t;++i)
#define lver(i,t,s) for(register int i = t;i >= s;--i)
//#define int __int128
using namespace std;
#undef mid
typedef long long ll;
typedef pair<int,int> PII;
const int N = 30007;
const ll mod = 1e9+7;
const ll INF = 1e15+7;
const double EPS = 1e-10;
const int base = 131;
int n,m,k;
int a[N];
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
if(n<2||m<1||k<1){
puts("0");
continue;
}
ll ans = ll(ll(n/2)*ll(n-n/2)*m*k);
printf("%lld\n",ans);
}
return 0;
}