Makes And The Product

https://codeforces.com/problemset/problem/817/B

求三元组(i,j,k)满足 ai*aj*ak是最小的数量

显然我们要排序,我们就确认了最小值是现在的a1*a2*a3

接下来,思考a1,a2,a3可不可以替换

就需要考虑a1,a2,a3之间的关系

1.a1==a2 && a2==a3

找到一直满足a3==ai 的最大索引

数量就是

2.a1==a2 && a2!=a3

只有a3可以替换

找到一直满足a3==ai 的最大索引

数量是

3.a1!=a2 && a2==a3

a2,a3都可以替换

找到一直满足a3==ai 的最大索引

数量是

4.a1!=a2 && a2!=a3

和第2个一样

cpp 复制代码
// Problem: B. Makes And The Product
// Contest: Codeforces - Educational Codeforces Round 23
// URL: https://codeforces.com/problemset/problem/817/B
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=1e5+9;
int a[N];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    }
    sort(a+1,a+1+n);
    // a1,a2,a3 能否交换
    ll index=0;
    if(a[1]==a[2] && a[2]==a[3]){
    	for(int i=3;i<=n;i++){
    		if(a[i]==a[3]){
    			index=i;
    		}else{
    			break;
    		}
    	}
    	cout<<(index*(index-1)*(index-2))/(3*2)<<'\n';
    }
    if(a[1]==a[2] && a[2]!=a[3]){
    	for(int i=3;i<=n;i++){
    		if(a[i]==a[3]){
    			index=i;
    		}else{
    			break;
    		}
    	}
    	cout<<(index-2)<<'\n';
    }
    if(a[1]!=a[2] && a[2]!=a[3]){
    	for(int i=3;i<=n;i++){
    		if(a[i]==a[3]){
    			index=i;
    		}else{
    			break;
    		}
    	}
    	cout<<(index-2)<<'\n';
    }
    if(a[1]!=a[2] && a[2]==a[3]){
    	for(int i=3;i<=n;i++){
    		if(a[i]==a[3]){
    			index=i;
    		}else{
    			break;
    		}
    	}
    	cout<<(index-1)*(index-2)/2<<'\n';
    }
    return 0;
}
相关推荐
AGI前沿2 分钟前
# 反内卷,回基础:Nano-Memory用极简检索与剪枝,解决大模型长对话遗忘
算法·机器学习
无限进步_8 分钟前
【C++】私有虚函数与多态:访问权限不影响动态绑定
开发语言·c++·ide·windows·git·算法·visual studio
君鼎12 分钟前
C++20 新特性全面总结
算法·c++20
枫叶机关录18 分钟前
算法笔记:K-means、K-means++与K-Medoids聚类算法--详解、案例分析
算法·聚类·k-means
贾斯汀玛尔斯23 分钟前
每天学一个算法-- 归并排序(Merge Sort)
数据结构·算法·排序算法
算法鑫探24 分钟前
算法中的二分法(二分查找)详解及示例
c语言·数据结构·算法·新人首发
叶子野格36 分钟前
《C语言学习:编程例题》8
c语言·开发语言·c++·学习·算法·visual studio
澈20737 分钟前
排序算法入门:冒泡、选择、插入排序详解
数据结构·算法·排序算法
smj2302_7968265241 分钟前
解决leetcode第3901题好子序列查询
python·算法·leetcode
_深海凉_43 分钟前
LeetCode热题100-每日温度
算法·leetcode·职场和发展