Cigital 面试体验(编码测试第 1 轮)
问题 1: Cigital 计划为即将到来的圣诞节举办 Secret Santa。秘密圣诞老人是西方圣诞节的传统,其中一个团体或社区的成员被随机分配一个他们匿名赠送礼物的人。每次他们过去通过在纸片上写下名字并随机选择一个人来分配人。这次工程团队提出了一个新想法。他们创建了一个大字符串,比如秘密圣诞老人字符串(1<=字符串大小 <=100000)。Cigital 中的每个人都必须通过提供起始从该字符串中选择子字符串(1<= 子字符串大小 <= 秘密圣诞老人字符串大小)和结束索引。他们将收集所有人的所有子字符串,然后他们将尝试匹配人员的子字符串,并据此分配人员。他们需要您的帮助来匹配给定秘密圣诞老人字符串的两个子字符串。
输入:
第一行将包含秘密圣诞老人字符串S。
下一行将包含表示查询数量的整数 n。
接下来的 n 行将包含四个整数 l1,r1,l2 和 r2 表示两个子字符串(包括)的开始和结束。
输出:
对于每个查询,如果两个子字符串匹配,则输出“是”,否则打印“否”
约束:
1 ≤ |秘密圣诞老人字符串的大小| ≤ 10^5
1 ≤ n ≤ 10^5
1 ≤ l1 ≤ r1 ≤ |秘密圣诞老人字符串的大小|
1 ≤ l2 ≤ r2 ≤ |秘密圣诞老人字符串的大小|
该字符串将仅包含小写字母。
样本输入:
秘密消毒创建
5
2 2 3 3
1 1 7 7
7 9 12 14
3 5 21 23
6 10 13 17
样本输出:
不
是的
是的
是的
不
问题 2: Cigital 目前维护一个名为 RADEC 的门户,用于维护扫描详细信息。扫描意味着它测试给定的代码/项目并产生现有的漏洞。客户可以随时安排。目前 Cigital 提供五种具有不同 SLA(完成扫描所需的时间)的扫描类型。
1. ABC2(SLA=2,需要2天完成)
2. ACB3(SLA=3,需要3天完成)
3. BAC5(SLA=5,需要5天完成)
4. BCA7(SLA=7,需要7天完成)
5. CAB10(SLA=10,需要10天完成)
管理员可以执行三种类型的操作。
1. 管理员可以安排扫描(针对给定的扫描 ID、扫描类型、开始日期)。
2. 管理员可以通过扫描 ID 删除扫描。
3. 管理员想知道给定时间间隔[t1,t2] 的一天内的最大扫描次数
包括的。
输入格式:
第一行包含表示测试用例数量的整数“t”
对于每个测试用例,第一行包含“n”,表示管理员执行的操作数,接下来的 n 行包含这些操作中的任何一个
(i) 调度新作业:1 scan_id scan_type start_date[示例:1 112342 3 6; 112342是扫描的id,3是扫描类型即BAC5,需要5天才能完成,6是开始日期,所以它的结束日期是开始日期+SLA-1,即6+5=11是结束日期]
(ii) 删除作业:2 scan_id[示例:2 112342]
(iii) 高峰日:3 t1 t2[例如:3 15 100]
每个查询中的第一个数字表示操作:
1=添加
2=删除
3=峰值
scan_id,scan_type,start_date,t1,t2 为整数,取值范围为 1 到 1000000
例子:
输入:
1
6
1 1 2 7
1 2 5 3
1 3 1 9
3 3 20
2 1
3 3 10
输出:
3
2
解释:
在添加的第一个查询 type2 扫描中,它的开始日期是 7,结束日期是 7+3-1=9
在第二个查询 type5 扫描添加,它的开始日期是 3 和结束日期是 3+10-1=12
在添加的第三个查询 type1 扫描中,它的开始日期是 9,结束日期是 9+2-1=10
在第四个查询中,查找日期为 3,20 的一天中的最大扫描次数(包括日期)
scan1 在几天内运行
7,8,9
scan2 在第 3、4、5、6、7、8、9、10、11、12 天运行
scan3 天运行
9,10
所以,在第 9 天,总共将运行 3 次扫描,所以答案是 3
在第五个查询中,scan1 被删除
在第 6 个查询中,日期为 3,10 的一天中的最大扫描次数为 2
问题3: