蓝桥杯每日一题2023.10.28

题目描述

递增三元组 - 蓝桥云课 (lanqiao.cn)

题目分析

60分解法:

直接暴力循环每一个数进行比较

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef long long ll;
ll n, a[N], b[N], c[N], ans;
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++)cin >> a[i];
	for(int i = 1; i <= n; i ++)cin >> b[i];
	for(int i = 1; i <= n; i ++)cin >> c[i];
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= n; j ++)
		{
			for(int k = 1; k <= n; k ++)
			{
				if(a[i] < b[j] && b[j] < c[k])ans ++;
			}
		}
	}
	cout << ans;
	return 0;
}

满分解法:

由于ABC的值是完全独立的所以可以使用乘法原理

由B作为一个判断点,看有多少个A符合要求,再看有多少个C符合要求,最后的答案则为两部分相乘的结果

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
ll n, a[N], b[N], c[N], s[N], cnt[N];
ll sa[N];//sa[i]表示在a[]中有多少个数小于b[i] 
ll sc[N];//sc[i]表示在c[]中有多少个数大于b[i]
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i ++)cin >> a[i], a[i] ++;
	for(int i = 1; i <= n; i ++)cin >> b[i], b[i] ++;
	for(int i = 1; i <= n; i ++)cin >> c[i], c[i] ++;
	//求sa[] 
	for(int i = 1; i <= n; i ++)cnt[a[i]] ++;
	for(int i = 1; i <= N; i ++)s[i] = s[i - 1] + cnt[i];
	for(int i = 1; i <= n; i ++)sa[i] = s[b[i] - 1];
	//求sc[] 
	memset(cnt, 0, sizeof cnt);
	memset(s, 0, sizeof s);
	for(int i = 1; i <= n; i ++)cnt[c[i]] ++;
	for(int i = 1; i <= N; i ++)s[i] = s[i - 1] + cnt[i];
	for(int i = 1; i <= n; i ++)sc[i] = s[N] - s[b[i]];
	//枚举每个b[i]
	ll ans = 0;
	for(int i = 1; i <= n; i ++)ans += sa[i] * sc[i];
	cout << ans;
	return 0;
}
相关推荐
学顶教育5 小时前
学顶教育:公务员面试常见问题!
面试·职场和发展
人才风控观察周刊9 小时前
教育机构人员背调方案的方案能力证据、版本与复审周期是否透明可
职场和发展
青少儿编程课堂13 小时前
2026蓝桥杯青少组:校园飞鸟穿越赛解析
蓝桥杯·scratch·少儿编程·图形化编程·蓝桥杯青少组
重生之小比特14 小时前
【算法拾光】二分查找|二分查找 + 再排序数组中查找元素的第一个和最后一个位置
算法·leetcode·职场和发展
招聘背调实务专家杨宏1 天前
上级评价出现主观偏差与口径冲突时如何校准
职场和发展
职豚求职小程序1 天前
中国铁塔2027届校招开启,网申怎么投、笔试面试怎么准备?
面试·职场和发展
冲冲那年1 天前
项目整合管理
职场和发展
零售校长1 天前
二七区零售门店店长面试,重点在哪几处
面试·职场和发展·零售
背景调查知识库1 天前
职业背景调查中的异常复核与候选人说明如何识别?
职场和发展
张张123y2 天前
后端第十三课:大模型评测(Evals)从 0 到 1——看完面试能讲明白
后端·面试·职场和发展·大模型评测·evals