[蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
题目描述
给定三个整数数组
A = [A1, A2, … AN],
B = [B1, B2, … BN],
C = [C1, C2, … CN],
请你统计有多少个三元组(i, j, k) 满足:
- 1 <= i, j, k <= N
- Ai < Bj < Ck
输入
第一行包含一个整数N。
第二行包含N个整数A1, A2, … AN。
第三行包含N个整数B1, B2, … BN。
第四行包含N个整数C1, C2, … CN。
1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000
输出
一个整数表示答案
样例输入
3
1 1 1
2 2 2
3 3 3
样例输出
27
法一:
前缀和写法代码如下:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010;
typedef long long LL;
int a[N], b[N], c[N], cnt[N], s[N], as[N], cs[N];int main() {int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i], a[i]++;for (int i = 0; i < n; i++)cin >> b[i], b[i]++;for (int i = 0; i < n; i++)cin >> c[i], c[i]++;for (int i = 0; i < n; i++)cnt[a[i]]++;for (int i = 1; i < N; i++)s[i] = s[i - 1] + cnt[i];for (int i = 0; i < n; i++)as[i] = s[b[i] - 1];memset(s, 0, sizeof(s));memset(cnt, 0, sizeof(cnt));for (int i = 0; i < n; i++)cnt[c[i]]++;for (int i = 1; i < N; i++)s[i] = s[i - 1] + cnt[i];for (int i = 0; i < n; i++)cs[i] = s[N - 1] - s[b[i]];LL res = 0;for (int i = 0; i < n; i++) {res += (LL)as[i] * cs[i];}cout << res << endl;return 0;}
法二:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int a[N], b[N], c[N];int main() {int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];for (int i = 0; i < n; i++)cin >> b[i];for (int i = 0; i < n; i++)cin >> c[i];sort(a, a + n);sort(b, b + n);sort(c, c + n);int p = 0, q = 0;long long res = 0;for (int i = 0; i < n; i++) {while (p < n && a[p] < b[i])p++;while (q < n && c[q] <= b[i])q++;res += p * (long long )(n - q);}cout << res << endl;return 0;
}
[蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和相关推荐
- [蓝桥杯2018初赛]方格计数-巧妙枚举,找规,数论
解题思路: 枚举第一象限的所有点,判断是否在圆内,最后结果*4 我们用下面的程序,来算一个半径为2的圆,其实我们第一象限算的就是那个绿点,然后类比到半径5000. 代码如下: #include < ...
- [蓝桥杯2018初赛]日志统计-双指针
代码如下: #include <iostream> #include <algorithm> using namespace std; typedef pair<int, ...
- [蓝桥杯2018初赛]第几个幸运数-数论+枚举
代码如下: #include <iostream> #include <cmath> using namespace std; typedef long long LL; LL ...
- [蓝桥杯2018初赛]字母阵列-单向dfs
题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLANQIAO ...
- 1367: [蓝桥杯2018初赛]付账问题
2018省赛A组第10题 付账问题 题目链接http://oj.ecustacm.cn/problem.php?id=1367 思路: 平均是每个人应该付a/n,但由于带的钱不够,所以先让钱少的人先付 ...
- [蓝桥杯2018初赛]倍数问题
题目描述 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数. 但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼. 现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数 ...
- [蓝桥杯2018初赛]第几天-日期计算(水题)
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年.闰年共有366天(1月~12月分别为31天.29天.31天.30天.31天. ...
- [蓝桥杯2016初赛]寒假作业-next_permutation枚举
暴搜代码(耗时较长,要90s左右)如下: #include <iostream> using namespace std; const int N = 15; int a[N]; bool ...
- [蓝桥杯2016初赛]四平方和-数论+枚举
题目描述 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^ ...
最新文章
- Docker Swarm Mode 学习笔记(聊聊 replicas)
- [白领会]在职场高级技能
- 解决org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryVal
- linux vim编辑kconfig 无法wq,编译linux-3.15.5时遇到的几个错误
- 二叉树遍历(已知先序和中序)
- Bash脚本教程之脚本除错
- 干货 | 懂点儿经济学有什么用?
- 本地如何安装运行多个vue.js项目?
- JVM01---简介
- 聚划算百亿补贴上线新iPhone SE 售价2799元
- restTemplate请求,报 : No instances avaliable for ip地址
- [数据恢复答疑]用partition manager导致资料丢失怎么办?
- 2层框架结构柱子间距_3分钟牢记框架结构要点
- express-art-template模板引擎(详细)
- Android——启动本地QQ,实现与指定的QQ号临时会话
- 查看office2016是不是永久激活状态
- 华为云服务器系统备份,云服务器备份系统
- 【LabVIEW串口编程】 02 串口发送
- extract($_POST, EXTR_SKIP)讲解
- win10在电脑已经连接WIFI的情况下查询到WiFi密码(不方便询问或没有办法获得密码的时候)
热门文章
- C语言试题七十三之请编写函数求两个数的最大公约数
- 如何解决Android studio已分享到github的项目但是git->commit directory提交不上去
- php session缓存,扫盲:php session缓存至memcached中的方法
- 你的女神今日结婚了!!!你失恋了......
- 岛国小姐姐来例假时,男朋友背着她偷偷查手机......
- 为什么每个理发店门口都有彩色的柱子?你不知道吧
- 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
- 限时秒杀┃秒杀90%的玩具,让孩子爱上科学的彩虹实验2来了!
- 如何简单形象又有趣地讲解神经网络是什么?
- java2的7次方怎么表示_静态市盈率要怎么看?