初赛第五场C

题意:和B一样,数据变大了而已

思路:对于子串,它最多改变2个数字的不同,具体看代码。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int d[50005];
 5 int a[50005],b[50005];
 6 int c[50005];
 7 int main(){
 8     int n,m;
 9     scanf("%d",&n);
10     int x;
11     for(int i=1;i<=n;i++){
12        scanf("%d",&d[i]);
13     }
14     int q;
15     scanf("%d",&q);
16     for(int ii=1;ii<=q;ii++){
17         scanf("%d",&m);
18         memset(a,0,sizeof(a));
19         memset(b,0,sizeof(b));
20         for(int i=1;i<=m;i++){
21             scanf("%d",&c[i]);
22             b[c[i]]++; a[d[i]]++;
23         }
24         int ans=0;
25         int sum=0;
26         for(int i=1;i<=n;i++) if(b[i]!=a[i]) sum++;
27         if(sum==0) ans++;
28
29         for(int i=m+1;i<=n;i++){
30             if(a[d[i-m]]==b[d[i-m]]) sum++;
31             else if(a[d[i-m]]-1==b[d[i-m]]) sum--;
32             a[d[i-m]]--;
33             if(a[d[i]]==b[d[i]]) sum++;
34             else if(a[d[i]]+1==b[d[i]]) sum--;
35             a[d[i]]++;
36             if(sum==0) ans++;
37         }
38          printf("%d\n",ans);
39     }
40     return 0;
41 }
时间: 2024-12-12 18:59:08

初赛第五场C的相关文章

HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4528 小明系列故事——捉迷藏 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1464    Accepted Submission(s): 423 Problem Description 小明的妈妈生了三个孩子,老大叫大明, 老二叫

初赛第五场B

每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 a 和 b 近似匹配(≈\approx≈) 的关系.a和 b 近似匹配当且仅当同时满足以下两个条件: ∣a∣=∣b∣,即 aaa 串和 bbb 串长度相等. 对于每种数字 c,c 在a中出现的次数等于 c 在b 中出现的次数. 此时,我们就称 a和 b近

UCloud 的安全秘钥 (计蒜客初赛第五场)(待解决)

20.7% 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 aa 和 bb 近似匹配(\approx≈) 的关系.aa 和 bb 近似匹配当且仅当同时满足以下两个条件: |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等. 对于每种数字 cc,cc 在 aa 

UCloud 机房的网络搭建(计蒜客初赛第五场)

UCloud 刚刚建立一个新机房,近日正在进行网络搭建.机房内有 nn 台服务器和 mm 个分线器,整个机房只有一个网线出口.分线器的作用是将一根网线转换成多根网线.蒜头君也知道每个分线器输出的最大网线根数(不一定要将分线器输出的每根线都用上),问你至少需要使用多少个分线器才能使得每台服务器都有网线可用. 输入格式 第一行输入 n,m(0 \le n,m \le 100)n,m(0≤n,m≤100). 第二行输入包含 mm 个整数的数组 A(0 \le A_i \le 10)A(0≤A?i??≤

2017 计蒜之道 初赛 第五场 UCloud 的安全秘钥(中等)

每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 aa 和 bb近似匹配(\approx≈) 的关系.aa 和 bb 近似匹配当且仅当同时满足以下两个条件: |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等. 对于每种数字 cc,cc 在 aa 中出现的次数等于cc 在 bb 中出现的次数

2017 计蒜之道 初赛 第五场 D. UCloud 的安全秘钥(困难)

小数据打表,大数据暴力. 导致超时的主要原因是$m$小的询问次数太多,可以把$m≤10$的答案直接暴力打表存起来,$m>10$的用$C$题的方法即可. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #in

2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)

暴力. 暴力枚举$S$串的每一个长度为$m$的子串,排序判断即可. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #inc

2017 计蒜之道 初赛 第五场 C. UCloud 的安全秘钥(中等)

暴力. $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫S数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue&g

2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建

贪心. 从大到小排序之后进行模拟,注意$n=1$和$n=0$的情况. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #in