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;
}
相关推荐
汤永红3 分钟前
week1-[顺序结构]大海
c++·算法·信睡奥赛
博哥爱吃肉34 分钟前
第2篇_Go语言基础语法_变量常量与数据类型
开发语言·算法·golang
Xの哲學4 小时前
TCP 连接管理:深入分析四次握手与三次挥手
网络·网络协议·算法
华清远见成都中心6 小时前
基于深度学习的异常检测算法在时间序列数据中的应用
人工智能·深度学习·算法
এ᭄画画的北北8 小时前
力扣-347.前K个高频元素
算法·leetcode
月殇_木言10 小时前
算法基础 第3章 数据结构
数据结构·算法
亮亮爱刷题11 小时前
算法提升之树上问题-(LCA)
数据结构·算法·leetcode·深度优先
火车叨位去194911 小时前
力扣top100(day03-01)--二叉树 03
算法·leetcode·职场和发展
岁忧11 小时前
(LeetCode 每日一题) 1780. 判断一个数字是否可以表示成三的幂的和 (数学、三进制数)
java·c++·算法·leetcode·职场和发展·go
浩少70212 小时前
LeetCode-16day:栈
java·数据结构·算法