CF1400-D. Zigzags
CF1400-D. Zigzags
题意:
给出一个由\(n\)个数字构成的数组\(a\),让你在这个数组中找出有多少个符合以下要求的元组\((i,j,k,l)\):
1. \(i<j<k<l\);
2. \(a_i==a_k,a_j=a_l\).
思路:
维护两个前缀和\(pre,suf\)。\(pre\)维护前\(i\)个数字中数字\(j\)的数量,\(suf\)维护后\(i\)个数字中数字\(j\)的数量。
那么只需要枚举每一个\(j\)和\(k\),用前缀和找出前\(j-1\)个数字中\(a[k]\)的数量\(pre[j-1][a[k]]\)和后\(k+1\)个数字中\(a[j]\)的数量\(suf[k+1][a[j]]\),两个数字相乘就是对于当前\(j,k\)符合要求的元组的数量。最后累加起来就是答案。
\(ans=\sum_{2<=j<k<=n-1}pre[j-1][a[k]]*suf[k+1][a[j]]\)
AC代码:
代码中的下标都是从\(0\)开始的,思路中提到的下标都是从\(1\)开始的。
#include <cstdio>
#include <cstring>
#include <iostream>
typedef long long ll;
const int Maxn = 3005;
int pre[Maxn][Maxn], suf[Maxn][Maxn], a[Maxn];
void solve() {
memset(pre, 0, sizeof pre);
memset(suf, 0, sizeof suf);
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", a + i);
}
pre[0][a[0]]++;
for (int i = 1; i < n; i++) {
for (int j = 0; j <= n; j++) {
pre[i][j] = pre[i - 1][j];
}
pre[i][a[i]]++;
}
suf[n - 1][a[n - 1]]++;
for (int i = n - 2; i >= 0; i--) {
for (int j = 0; j <= n; j++) {
suf[i][j] = suf[i + 1][j];
}
suf[i][a[i]]++;
}
ll ans = 0;
for (int j = 1; j <= n - 3; j++) {
for (int k = j + 1; k <= n - 2; k++) {
ans += 1LL * pre[j - 1][a[k]] * suf[k + 1][a[j]];
}
}
printf("%lld\n", ans);
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
CF1400-D. Zigzags的更多相关文章
- Educational Codeforces Round 94 (Rated for Div. 2) String Similarity、RPG Protagonist、Binary String Reconstruction、Zigzags 思维
题目链接:String Similarity 题意: 首先题目定义了两个串的相似(串的构成是0.1),如果两个串存在对于一个下标k,它们的值一样,那么这两个串就相似 然后题目给你一个长度为2n-1的串 ...
- Zigzags CodeForces - 1400D
给出一组数: 寻找四元组的个数 (i,j,k,l)其中a[i]=a[k],并且a[j]=a[l] 刚看到这个题的时候想到了记录每个数的个数,然后求前缀和以及后缀和.先枚举i和k,当a[i]和a[k]相 ...
- Educational Codeforces Round 94 (Rated for Div. 2) D. Zigzags (枚举,前缀和)
题意:有一长度为\(n(4\le n\le 3000)\)的数组,选择四个位置\((i,j,k,l)\ (1\le i<j<k\le n)\),使得\(a_i=a_k\)并且\(a_j=a ...
- Deep Learning in a Nutshell: History and Training
Deep Learning in a Nutshell: History and Training This series of blog posts aims to provide an intui ...
- CodeForces 228D. Zigzag(线段树暴力)
D. Zigzag time limit per test 3 seconds memory limit per test 256 megabytes input standard input out ...
- hbot固件配置
又入了一台打印机,171到手,本来之前有更好的,无奈别人下手太快,只剩这台了. 175x135x180的样子. 创客的板,还带16g的闪迪内存卡,看到那会儿感觉赚大了! 拿到的时候不少螺丝松的,有的打 ...
- varints
Protocol Buffer技术详解(数据编码) - Stephen_Liu - 博客园 https://www.cnblogs.com/stephen-liu74/archive/2013/01/ ...
- L117
Hoover has become a household word for a vacuum cleaner through the world.Economics are slowly killi ...
- 实时流处理Storm、Spark Streaming、Samza、Flink孰优孰劣
对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在不断的升级改进,从0.8.x版本开始到现在的1.1.x版本,Kafka的 ...
随机推荐
- 【Oracle】substr()函数详解
Oracle的substr函数简单用法 substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个 ...
- LeetCode872. 叶子相似的树
题目 1 class Solution { 2 public: 3 vector<int>ans1; 4 vector<int>ans2; 5 bool leafSimilar ...
- BAPI_MATERIAL_BOM_GROUP_CREATE创建BOM
天使用BAPI函数:BAPI_MATERIAL_BOM_GROUP_CREATE创建BOM组数据,过程中发现很多问题啊.总结如下: BOMGROUP VARIANTS 这两个参数必须要传 ...
- Ice系列--强大如我IceGrid
前言 IceGrid是一个提供服务定位和服务激活的组件,但它的功能远不止于此.从它的命名可以看出它的设计理念-网格计算(grid computing).网格计算被定义为由一系列关联的廉价计算机组成的计 ...
- typora+PicGo+gitee搭建免费的的床
一.gitee 1.第一步拥有自己的gitee账号 没有的可以自己去注册gitee地址 2.使用自己的gitee账号创建仓库 创建好之后注意 记住.com/以后的地址 此处就为y***L/photo- ...
- 使用Canal作为mysql的数据同步工具
一.Canal介绍 1.应用场景 在前面的统计分析功能中,我们采取了服务调用获取统计数据,这样耦合度高,效率相对较低,目前我采取另一种实现方式,通过实时同步数据库表的方式实现,例如我们要统计每天注册与 ...
- SQL 语法速成手册
本文针对关系型数据库的一般语法.限于篇幅,本文侧重说明用法,不会展开讲解特性.原理. 一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件). 数 ...
- 牛逼!MySQL 8.0 中的索引可以隐藏了…
MySQL 8.0 虽然发布很久了,但可能大家都停留在 5.7.x,甚至更老,其实 MySQL 8.0 新增了许多重磅新特性,比如栈长今天要介绍的 "隐藏索引" 或者 " ...
- CentOS系统内核升级(在线 离线)
为什么要升级内核? Docker 在CentOS系统中需要安装在 CentOS 7 64 位的平台,并且内核版本不低于 3.10:CentOS 7.× 满足要求的最低内核版本要求,但由于 CentOS ...
- 07. struts2中对Action的管理方式
web.xml配置文件的常用代码 <filter> <filter-name>struts2</filter-name> <filter-class>o ...