前缀后缀集合
来源:互联网 发布:高分一号数据预处理 编辑:程序博客网 时间:2024/06/05 14:52
一个数组包含N个正整数,其中有些是重复的。一个前缀后缀集是满足这样条件的下标对(P,S), 0<= P,S < N 满足数组元素A[0..P]的值也在A[S..N - 1]的值中出现,并且A[S..N - 1]中的值也再A[0..P]中出现。换句话说前缀的集合A[0..P]与后缀集合A[S..N - 1]包含完全相同的值。求这样的前缀后缀集合的数量。
例如:3 5 7 3 3 5,共有14个集合符合条件:(1, 4), (1, 3), (2, 2), (2, 1), (2, 0), (3, 2), (3, 1), (3, 0), (4, 2), (4, 1), (4, 0), (5, 2), (5, 1), (5, 0)
本题由 @javaman 翻译。
Input
第1行:一个数N, 表示数组的长度(1 <= N <= 50000)。第2 - N + 1行:每行1个数,对应数组中的元素Ai。(1 <= Ai <= 10^9)
Output
输出符合条件的集合数量。
Input示例
6357335
Output示例
14#include <cstring>#include <iostream>#include <set>using namespace std;const int MAXN = 50005;int input[MAXN];int main(){int n;cin >> n;for (int i = 0; i < n; i++){cin >> input[i];}int result = 0;set<int> a, b;int pos = n-1;int count = 0;for (int i = 0; i < n; i++){if (a.find(input[i]) != a.end()){result += count;continue;}a.insert(input[i]);count = 0;for (int j = pos; j >= 0; j--){if (a.find(input[j]) != a.end()){b.insert(input[j]);pos--;}else{break;}if (a.size() == b.size()){result++;count++;}}}cout << result << endl;return 0;}
阅读全文
0 0
- 1280 前缀后缀集合
- 前缀后缀集合
- 51NOD1280 前缀后缀集合
- 51nod 1280 前缀后缀集合
- 51nod-1280 前缀后缀集合
- 51nod 1280 前缀后缀集合(set)
- 51nod 1280 前缀后缀集合
- 51Nod-1280-前缀后缀集合
- 51Nod- 1280-前缀后缀集合(map)
- 运算符*, 前缀++,后缀++
- 前缀++和后缀++
- 中缀,前缀,后缀表达式
- 前缀树、后缀树
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 英语前缀后缀
- C++基础一一可变参数的相关介绍
- reac native 项目学习——GD
- mysql-5.7.17-winx64.zip 安装
- Codeforces 851D. Arpa and a list of numbers
- linux 下 的tail 命令
- 前缀后缀集合
- 笔记 -- 小项目
- 从高考到日本修士,从C语言到人工智能,我的程序人生
- CH340 MAC驱动使用教程
- poj1741 树分治
- 利用PROGISP实现ARDUINO IDE编写的程序的下载以及如何把AVR单片机做成ARDUINO板
- JavaScript的String对象
- 广联达2018校招笔试题
- Hibernate 入门(1):简介&安装