2017 计蒜之道 初赛 第五场 UCloud 的安全秘钥(中等)
每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作。作为一家安全可信的云计算平台,秘钥的安全性至关重要。因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下:
首先,定义两个由数字序列组成的秘钥 aa 和 bb近似匹配(\approx≈) 的关系。aa 和 bb 近似匹配当且仅当同时满足以下两个条件:
- |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等。
- 对于每种数字 cc,cc 在 aa 中出现的次数等于cc 在 bb 中出现的次数。
此时,我们就称 aa 和 bb 近似匹配,即 a \approx ba≈b。例如,(1,3,1,1,2)\approx(2,1,3,1,1)(1,3,1,1,2)≈(2,1,3,1,1)。
UCloud 每年会收集若干不安全秘钥,这些秘钥组成了不安全秘钥集合 TT。对于一个秘钥 ss 和集合 TT 中的秘钥 tt 来说,它们的相似值定义为:ss 的所有连续子串中与 tt 近似匹配的个数。相似值越高,说明秘钥 ss 越不安全。对于不安全秘钥集合 TT 中的每个秘钥 tt,你需要输出它和秘钥 ss 的相似值,用来对用户秘钥的安全性进行分析。
输入格式
第一行包含一个正整数 nn,表示 ss 串的长度。
第二行包含 nn 个正整数 s_1,s_2,...,s_n(1\leq s_i\leq n)s1,s2,...,sn(1≤si≤n),表示 ss 串。
接下来一行包含一个正整数 mm,表示询问的个数。
接下来 mm 个部分:
每个部分第一行包含一个正整数 k(1\leq k\leq n)k(1≤k≤n),表示每个 tt 串的长度。
每个部分第二行包含 kk 个正整数 t_1,t_2,...,t_k(1\leq t_i\leq n)t1,t2,...,tk(1≤ti≤n),表示 TT 中的一个串 tt。
输入数据保证 TT 中所有串长度之和不超过 200000200000。
对于简单版本:1\leq n,m\leq 1001≤n,m≤100;
对于中等版本:1\leq n\leq 50000,1\leq m\leq 5001≤n≤50000,1≤m≤500;
对于困难版本:1 \le n \le 50000, 1 \le m \le 1000001≤n≤50000,1≤m≤100000。
输出格式
输出 mm 行,每行一个整数,即与 TT 中每个串 tt近似匹配的 ss 的子串数量。
样例解释
对于第一个询问,(3,2,1,3)\approx(2,3,1,3)(3,2,1,3)≈(2,3,1,3),(3,2,1,3)\approx(3,1,3,2)(3,2,1,3)≈(3,1,3,2);
对于第二个询问,(1,3)\approx(3,1)(1,3)≈(3,1),(1,3)\approx(1,3)(1,3)≈(1,3);
对于第三个询问,(3,2)\approx(2,3)(3,2)≈(2,3),(3,2)\approx(3,2)(3,2)≈(3,2)。
样例输入
5
2 3 1 3 2
3
4
3 2 1 3
2
1 3
2
3 2
样例输出
2
2
2
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=+;
int a[maxn],b[maxn],n,m,nn;
int v1[maxn],v2[maxn];
int main()
{
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",a+i);
scanf("%d",&nn);
while(nn--)
{
scanf("%d",&m);
if(m==)
{
scanf("%d",b);
int ans=;
for(int i=; i<n; i++)
if(a[i]==b[]) ans++;
printf("%d\n",ans);
continue;
}
memset(v2,,sizeof(v2));
memset(v1,,sizeof(v1));
for(int i=; i<m; i++)
{
scanf("%d",b+i);
v2[b[i]]++;
}
int ans=;
int c=;
for(int j=; j<m; j++)
v1[a[j]]++; for(int i=; i<=n; i++)
if(v1[i]!=v2[i]) c++;
if(c==) ans++;
for(int i=; i<=n-m; i++)
{
if(v1[a[i-]]==v2[a[i-]]) c++;
if(v1[a[i+m-]]==v2[a[i+m-]]) c++;
v1[a[i-]]--;
v1[a[i+m-]]++;
if(v1[a[i-]]==v2[a[i-]]) c--;
if(v1[a[i+m-]]==v2[a[i+m-]]) c--;
if(c==) ans++;
}
printf("%d\n",ans);
}
return ;
}
2017 计蒜之道 初赛 第五场 UCloud 的安全秘钥(中等)的更多相关文章
- 2017 计蒜之道 初赛 第五场 D. UCloud 的安全秘钥(困难)
小数据打表,大数据暴力. 导致超时的主要原因是$m$小的询问次数太多,可以把$m≤10$的答案直接暴力打表存起来,$m>10$的用$C$题的方法即可. #include <iostream ...
- 2017 计蒜之道 初赛 第五场 C. UCloud 的安全秘钥(中等)
暴力. $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫$S$数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$. #include < ...
- 2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)
暴力. 暴力枚举$S$串的每一个长度为$m$的子串,排序判断即可. #include <iostream> #include <cstdio> #include <cst ...
- 2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建
贪心. 从大到小排序之后进行模拟,注意$n=1$和$n=0$的情况. #include <iostream> #include <cstdio> #include <cs ...
- 2017 计蒜之道 初赛 第三场 D. 腾讯狼人杀 (点边都带权的最大密度子图)
点边都带权的最大密度子图,且会有必须选的点. 求\(\frac{\sum w_e}{k*(2n-k)}\)的最大值,其中k为子图点数 设\[h(g) = \sum w_e - g*(2nk-k^2)\ ...
- 2018 计蒜之道 初赛 第五场 A 贝壳找房搬家
贝壳找房换了一个全新的办公室,每位员工的物品都已经通过搬家公司打包成了箱子,搬进了新的办公室了,所有的箱子堆放在一间屋子里(这里所有的箱子都是相同的正方体),我们可以把这堆箱子看成一个 x*y*z 的 ...
- 2017 计蒜之道 初赛 第一场 A、B题
A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏——成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋 ...
- 2017 计蒜之道 初赛 第一场 A 阿里的新游戏
题链:https://nanti.jisuanke.com/t/15499 这题观察图纸可知成三线段上的相邻点之间的距离有1,2,3三种情况的,同时要成线段必然是同横坐标或者纵坐标,然后我们排除掉穿过 ...
- 2017 计蒜之道 初赛 第一场 B阿里天池的新任务(简单)
题链:"https://nanti.jisuanke.com/t/15500" 本来希望通过找循环节然后套KMP来通过后面题的,可是只过了B题,可能循环节不一定是存在的. #inc ...
随机推荐
- STL set 详细用法
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. 用到的库 #include <set> 定义 最简单: set<int> a; set和其他的stl一样,都支持 ...
- Layui多文件上传进度条
Layui原生upload模块不支持文件上传进度条显示,百度,谷歌找了一下不太适用.后面找到一个别人修改好的JS,替换上去,修改一下页面显示即可使用,一下是部分代码 HTML: <div cla ...
- 转载 | Sublime text3 实用快捷键整理
实用快捷键 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+ ...
- Mock Server的搭建
一.概述 我们系统与第三方开票系统有交互,场景是我们系统请求第三方开票系统,第三方开票系统根据我们的请求数据,生成开票信息然后返回发票号或异常信息,我们根据返回的信息做对应的处理.因为配合上存在一些障 ...
- javaScript基础-03 javascript语句
一. 声明语句 var和function都是声明语句.声明或定义变量或函数. var 声明一个或者多个变量.语法如下: var a ; var b = 1; var c, d; var e = 3; ...
- MapReduce on Yarn运行原理
一.概念综述 MapReduce是一种可用于数据处理的编程模型(或计算模型),该模型可以比较简单,但想写出有用的程序却不太容易.MapReduce能将大型数据处理任务分解成很多单个的.可以在服务器集群 ...
- 「雕爷学编程」Arduino动手做(10)——敲击传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- es6 个人笔记
1.package.json==>npm init node_modules==>npm install webpack -D webpack.config.js==> ...
- fiddler抓HTTPS及APP请求的配置教程
一.fiddler安装 Fiddler官网下载Fiddler进行安装:https://www.telerik.com/fiddler 二.fiddler设置抓取HTTPS的请求 fiddler默认设置 ...
- 利用ShardingSphere-JDBC实现分库分表
利用ShardingSphere-JDBC实现分库分表 1. ShardingSphere概述 1.1 概述 业务发展到一定程度,分库分表是一种必然的要求,分库可以实现资源隔离,分表则可以降低单表数据 ...