时间限制:2s 内存限制:64MB

问题描述

xxx有一个长度为n的宝石链,宝石有m种不同的颜色。xxx想截取其中连续的一段做一个项链。为了让项链更漂亮,xxx希望项链中的宝石包含所有颜色。

输入描述

第一行一个整数T(1≤T≤10)表示数据组数。

对于每组数据第一行两个整数n(1≤n≤〖10〗^5),m(1≤m≤30)

第二行n个整数C_1,C_2,…,C_n (0≤C_im)表示宝石链上每个宝石的颜色

输出描述

对于每组数据输出一行:一个整数,如果存在满足条件的方案,输出满足条件的最短长度,否则输出-1。

输入样例

2

4 3

0 1 2 0

4 3

0 1 1 0

输出样例

3

-1

样例解释

样例一: 截取[0 1 2],[1 2 0],[0 1 2 0]均满足条件,因此输出3

样例二: 没有满足条件的,输出-1

【题目链接】:

【题解】



枚举区间的左端点i,然后二分右端点;

用前缀和来记录到某个位置所有的颜色的贝壳的拥有情况;

右端点减去左端点的拥有情况就是中间的拥有情况;



【完整代码】

#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++)
using namespace std;
#define pb push_back; const int MAXN = 1e5+10; int n,q,m;
int pre[MAXN][34],temp[34]; bool ok(int l,int r)
{
int cnt = m; rep1(i,0,m-1)
{
temp[i] = pre[r][i]-pre[l-1][i];
if (temp[i]==0)
{
cnt--;
return false;
}
}
if (cnt==m)
return true;
else
return false;
} int main()
{
//freopen("D:\\rush.txt","r",stdin);
int T;
scanf("%d",&T);
while (T--)
{
int ans = 21e8;
memset(pre,0,sizeof(pre));
scanf("%d%d",&n,&m);
rep1(i,1,n)
{
int x;
scanf("%d",&x);
pre[i][x]++;
for (int j = 0;j<=m-1;j++)
pre[i][j] += pre[i-1][j];
}
rep1(i,1,n)
{
int l = i,r = n,ans1=-1;
while (l<=r)
{
int m = (l+r)>>1;
if (ok(i,m))
ans1=m,r = m-1;
else
l = m+1;
}
if (ans1!=-1)
ans = min(ans,ans1-i+1);
}
if (ans==21e8)
puts("-1");
else
printf("%d\n",ans);
}
return 0;
}

【C++竞赛 A】xxx的项链的更多相关文章

  1. 【C++竞赛 E】xxx和yyy的旅行

    时间限制:1s 内存限制:32MB 问题描述 有n个城市和m条双向铁路.对于任意两个不同的城市x和城市y,两个城市之间有双向铁路,否则有双向公路,通过任意一条直达公(铁)路花费一小时.城市x与城市y存 ...

  2. BZOJ1493 [NOI2007]项链工厂

    未完待续... 终于改对了 热泪盈眶.jpg 错误原因:pushdown的时候没有判断是否有左右儿子,也没当x=0 return,于是出现一些奇怪的错误 #include<bits/stdc++ ...

  3. HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)     Problem ...

  4. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  6. HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)

    Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  8. 数据结构(Splay平衡树): [NOI2007] 项链工厂

    [NOI2007] 项链工厂 ★★★   输入文件:necklace.in   输出文件:necklace.out   简单对比 时间限制:4 s   内存限制:512 MB [问题描述] T公司是一 ...

  9. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

随机推荐

  1. Android学习笔记进阶15之Shader渲染

    Android提供的Shader类主要是渲染图像以及一些几何图形. Shader有几个直接子类: BitmapShader    : 主要用来渲染图像 LinearGradient  :用来进行线性渲 ...

  2. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

  3. 命令行SVN的使用

    1.检出svn  co  http://路径(目录或文件的全路径) [本地目录全路径]  --username 用户名 --password 密码svn  co  svn://路径(目录或文件的全路径 ...

  4. Linux中iptables学习

    防火墙:是一种位于内部网络与外部网络之间安全的防护系统,依照特定的规则,允许或是限制传输的数据通过.iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfi ...

  5. Appium_python3使用汇总

    1. 对webview页面元素的处理self.driver.switch_to.context("WEBVIEW_com.aaa.bbb")source = self.driver ...

  6. 找不到或无法载入主类 org.jivesoftware.openfire.starter.ServerStarter

    刚接触openfire的配置就出现了这个错误.解决方法非常easy,忘记了将openfire的源文件加入到user entries中了

  7. Linux 解压缩命令整理

    一.tar命令 参数 参数 详解 参数 详解 -c 可以使用绝对路径来压缩 -x 解开一个压缩文件的参数指令 -t 查看内容 -r 向压缩归档文件末尾追加文件 -u 更新原压缩包中的文件 -z 有gz ...

  8. 洛谷——P2515 [HAOI2010]软件安装

    https://www.luogu.org/problem/show?pid=2515#sub 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中 ...

  9. 浅谈Normalize.css

    浅谈Normalize.css 一.总结 1.Normalize.css:它在默认的HTML元素样式上提供了跨浏览器的高度一致性,花了几百个小时来努力研究不同浏览器的默认样式的差异. 2.优于rese ...

  10. 画pcb时丝印不能再焊盘上

    上图中U3就在焊盘上,这样印出来U3显示不全