luogu P4065 [JXOI2017]颜色
时间:2019-12-07
本文章向大家介绍luogu P4065 [JXOI2017]颜色,主要包括luogu P4065 [JXOI2017]颜色使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
可怜有一个长度为 n 的正整数序列 Ai,其中相同的正整数代表着相同的颜色。
现在可怜觉得这个序列太长了,于是她决定选择一些颜色把这些颜色的所有位置都删去。
删除颜色 i 可以定义为把所有满足 Aj = i 的位置 j 都从序列中删去。
然而有些时候删去之后,整个序列变成了好几段,可怜不喜欢这样,于是她想要知道有多少种删去颜色的方案使得最后剩下来的序列非空且连续。
例如颜色序列 {1, 2, 3, 4, 5},删除颜色 3 后序列变成了 {1, 2} 和 {4, 5} 两段,不满足条件。而删除颜色 1 后序列变成了 {2, 3, 4, 5},满足条件。
两个方案不同当且仅当至少存在一个颜色 i 只在其中一个方案中被删去。
输入格式
第一行输入一个整数 T 表示数据组数。每组数据第一行输入一个整数 n 表示数列长度。第二行输入 n 个整数描述颜色序列。
输出格式
对于每组数据输出一个整数表示答案。
给每个颜色rand()一个值,使得所有相同颜色之和为0
维护前缀和,用map找左边出现过的一样的值,即可以相减为0的值
#include<map>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int N=3e5+10;
inline ll read(ll x=0){
char c=getchar();
while(c<'0'||c>'9')c=getchar();
while('0'<=c&&c<='9'){ x=(x<<3)+(x<<1)+c-'0'; c=getchar(); }
return x;
}
#define Rand() (((ll)rand())<<1)-RAND_MAX
ll n,a[N],Max[N],sum[N];
map<ll,int>vis;
signed main(){
srand(time(0));
register int i;
register ll op,qz,ans;
for(int T=read();T;T--){
n=read();
for(i=1;i<=n;i++)a[i]=read(),Max[a[i]]=i;
qz=0,ans=0; vis[qz]=1;
for(i=1;i<=n;i++){
op= (Max[a[i]]^i) ? Rand() : -sum[a[i]];
sum[a[i]]+=op; qz+=op;
ans+=vis[qz]; vis[qz]++;
}
printf("%lld\n",ans);
vis.clear();
memset(Max,0,sizeof(Max));
memset(sum,0,sizeof(sum));
}
return 0;
}
}
原文地址:https://www.cnblogs.com/naruto-mzx/p/12001437.html
- 剑指OFFER之二维数组中的查找(九度OJ1384)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 简单的客户机服务器投射模拟
- 使用gcc编译gdb调试
- 剑指OFFER之第一个只出现一次的字符(九度OJ1283)
- c++中类长度解析
- 剑指OFFER之丑数(九度OJ1214)
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
- 剑指OFFER之从1到n中出现1的次数(九度OJ1373)
- 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
- 剑指OFFER之最小的K个数(九度OJ1371)
- 剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)
- 如何成为一名10x的数据分析师?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular 应用的DevDependencies
- 轻量级服务网格 - osm
- 漫画:设计模式之 “外观模式”
- 使用 Zotero 在 Markdown 中优雅处理参考文献
- Mybatis plus自动生成业务代码
- 功能强大的CD工具 - flagger
- Swift defer
- MySQL 最佳实践:CPU 100%,MySQL 到底在干什么
- 【译】Flutter 1.20 发布
- 算法面试题:一个List,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点!
- Angular CLI创建的项目文件用途一栏
- [888]python内置函数vars()|dir()|locals()
- Mdnice,一种记录知识的新方式
- [887]python中@classmethod和@staticmethod
- leetcode每日一题-99. 恢复二叉搜索树