列表

详情


NC229269. Makes And The Product

描述

从军队归来后,马克斯收到了一份礼物——一个由 个正整数组成的数组。他已经很长时间没有解决问题了,所以他开始有兴趣回答一个特定的问题:有多少个索引,使得 是最小可能?帮他解决!

输入描述

第一行包含一个正整数,表示数组 中元素的数量。
第二行包含 个正整数,表示给定数组的元素。

输出描述

打印一个数字 — 三元组 的数量,使得 成对不同并且 是可能的最小值。

示例1

输入:

4
1 1 1 1

输出:

4

说明:

马克斯总是从四个中选择三个,选择它们的方法数是 4。

示例2

输入:

5
1 3 2 3 4

输出:

2

说明:

选择一组数字 (1, 2, 3)(数字,而不是索引)。既然有两种方法可以选择一个元素3,那么答案就是2。

示例3

输入:

6
1 3 3 1 3 2

输出:

1

说明:

选择一组数字 (1, 1, 2),并且只有1种方法可以选择索引。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 52ms, 内存消耗: 936K, 提交时间: 2022-08-19 23:58:43

#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
signed main()
{
	cin>>n;
	for(int i = 1;i <= n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	int p = 3;
	while(a[3] == a[p]) p++;
	p--;
	if(a[2] != a[3]) cout<<p-2;
	else if(a[1] != a[2]) cout<<1LL*(p-1)*(p-2)/2;
	else cout<<1LL*p*(p-1)*(p-2)/6;
	return 0;
}

pypy3 解法, 执行用时: 145ms, 内存消耗: 33216K, 提交时间: 2022-09-30 20:31:29

n = map(int, input())
a = list(map(int, input().split()))
a.sort()
if a[0] == a[1] and a[1] == a[2]:
    k = a.count(a[0])
    print(k * (k - 1) * (k - 2) // 6)
elif a[0] == a[1]:
    print(a.count(a[2]))
elif a[1] == a[2]:
    k = a.count(a[1])
    print(k * (k - 1) // 2)
else:
    print(a.count(a[2]))

上一题