题解 CF1004C
题意描述:
给定 \(n\) 个数,从前往后找,看看能和后面的数组成多少个不同的数对。
若两个数对仅仅是位置不同,我们也认为是两个不同的数对。
题目分析:
阅读题目,我们不难看出,若前面有一个数已经出现了,后面即使出现了重复的数,在以那个重复的数为开头时也不会被统计答案。
故我们易得以下思路:
维护两个 map
和一个 set
分别维护的是:每个数出现了多少次、是否出现过以某数为开头的情况和当前数的种类数。
然后我们从前往后扫,遇到一个数将其从第一个 map
中删去一次,若删除后第一个 map
关于这个数的信息为 \(0\),则将其从 set
中删除。然后若该数在第二个 map
中被标记,则证明已经出现过以该数为开头的情况,否则将答案加上当前 set
的大小。
时间复杂度 \(O(n \lg n)\)。
代码实现:
#include <bits/stdc++.h>
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#define int long long
#define TIME_LIMIT 1
using namespace std;
#define MAX_SIZE (int)1.1e5
typedef pair<int,int> pii;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
map<int,int>backet;
set<int>bbs;
map<int,bool>hashtable;
int a[MAX_SIZE];
signed main(){
ios::sync_with_stdio(false);
#ifdef LOCAL
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
double c1 = clock();
#endif
//============================================
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
bbs.insert(a[i]);
backet[a[i]]++;
}
int ans = 0;
for(int i=1;i<=n;i++){
backet[a[i]]--;
if(!backet[a[i]]){
auto it = bbs.find(a[i]);
bbs.erase(it);
}
if(!hashtable[a[i]])
hashtable[a[i]] = true;
else
continue;
ans += bbs.size();
}
cout<<ans<<endl;
//============================================
#ifdef LOCAL
double c2 = clock();
cerr<<"Used Time: "<<c2-c1<<" μs."<<endl;
if(c2-c1>TIME_LIMIT*CLOCKS_PER_SEC)
cerr<<"Warning!! Time Limit Exceeded!!"<<endl;
fclose(stdin);
fclose(stdout);
#endif
return 0;
}
\(\text{Written on Ubuntu 22.10}\)
题解 CF1004C的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- 源码解析Collections.sort ——从一个逃过单测的 bug 说起
本文从一个小明写的bug 开始,讲bug的发现.排查定位,并由此展开对涉及的算法进行图解分析和源码分析. 事情挺曲折的,因为小明的代码是有单测的,让小明更加笃定自己写的没问题.所以在排查的时候,也经历 ...
- 随风迎 jmeter下TPS插件的安装(转)
1.下载插件http://pan.baidu.com/s/1mioVJni 2.解压下载的安装包: 将 jpgc-graphs-basic-2.0.zip 解压缩后只有一个 lib 目录,该目录下有一 ...
- 原来TypeScript中的接口和泛型这么好理解
"接口"和"泛型"是 TypeScript 相比于 JavaScript 新增的内容,都用于定义数据类型 前面两篇文章总结了TypeScript中的 类型注解. ...
- shell命令-lsof
前言 lsof是系统管理常用命令,其名指的是list open files,列出打开的文件,而在linux系统,一切皆文件. centos7安装:yum install -y lsof 获取网络信息 ...
- quarkus依赖注入之十:学习和改变bean懒加载规则
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...
- 推荐一款免费好用的远程桌面:Getscreen
因为平时有多台设备要用,所以远程桌面是我经常要使用的工具. 最近,正好看到一款不错的远程桌面软件,马上拿出来推荐给大家,如果有需要的可以看看. 今天要推荐的远程桌面软件就是这款叫Getscreen的软 ...
- 文心一言 VS 讯飞星火 VS chatgpt (81)-- 算法导论7.4 6题
六.如果用go语言,考虑对 PARTITION 过程做这样的修改:从数组 A 中随机选出三个元素,并用这三个元素的中位数(即这三个元素按大小排在中间的值)对数组进行划分.求以a 的函数形式表示的.最坏 ...
- 【渗透测试】Vulnhub EMPIRE BREAKOUT
渗透环境 攻击机: IP: 192.168.149.128(Kali) 靶机: IP:192.168.149.130 靶机下载地址:https://www.vulnhub.com/entr ...
- 纯干货!一文get昇腾Ascend C编程入门全部知识点
本文分享自华为云社区<昇腾Ascend C编程入门教程>,作者:昇腾CANN . 2023年5月6日,在昇腾AI开发者峰会上,华为正式发布了面向算子开发场景的昇腾Ascend C编程语言. ...
- Andrew Ng 机器学习&深度学习课程 代码作业解答 集合
写在最前 2018年是对自己来说是崭新的一年,在过去的3个多月里,从最基础的lr, 学到现在的LSTM, GAN..感觉第一次追上了计算机科学飞速发展的浪潮.虽然很多地方都仍是一知半解,但时间还长 ...