2020.04.08【NOIP普及组】模拟赛C组24 总结

2020.04.08 2020.04.08 2020.04.08 N O I P NOIP NOIP普及组】模拟赛 C C C 24 24 24 总结

概述:

这次比赛我 A K AK AK了,拿了 300 300 300分——其实这次比赛的题目确实很简单,很多人都是想难了。

第一题: S o c i a l Social Social D i s t a n c i n g Distancing Distancing 1 1 1

题目

题目描述
一种新型疾病,COWVID-19,开始在全世界的奶牛之间传播。Farmer John 正在采取尽可能多的预防措施来防止他的牛群被感染。
Farmer John 的牛棚是一个狭长的建筑物,有一排共 N 个牛栏(2≤N≤10^5)。有些牛栏里目前有奶牛,有些目前空着。得知“社交距离”的重要性,Farmer John 希望使得 D 尽可能大,其中 D 为最近的两个有奶牛的牛栏的距离。例如,如果牛栏 38 是最近的有奶牛的牛栏,那么 D=5。
最近两头奶牛新来到 Farmer John 的牛群,他需要决定将她们分配到哪两个之前空着的牛栏。请求出他如何放置这两头新来的奶牛,使得 D 仍然尽可能大。Farmer John 不能移动任何已有的奶牛;他只想要给新来的奶牛分配牛栏。

输入
输入的第一行包含 N。下一行包含一个长为 N 的字符串,由 01 组成,描述牛棚里的牛栏。0 表示空着的牛栏,1 表示有奶牛的牛栏。字符串中包含至少两个 0,所以有至少有足够的空间安置两头新来的奶牛。

输出
输出 Farmer John 以最优方案在加入两头新来的奶牛后可以达到的最大 D 值(最近的有奶牛的牛栏之间的距离)。

样例输入
14
10001001000010

样例输出
2

数据范围限制
测试点 1-6 满足 N≤10。
测试点 7-8 满足 N≤100。
测试点 9-11 满足 N≤5000。
测试点 12-15 满足 N≤10^5。

提示
在这个例子中,Farmer John 可以以这样的方式加入奶牛,使得牛栏分配变为 10x010010x0010,其中 x 表示新来的奶牛。此时 D=2。不可能在加入奶牛之后取到更大的 D 值。

解题思路

这道题目的方法是进行枚举暴力。
我们知道加入奶牛其实有 4 4 4种方法。

  1. 在两个间隙最长的地方分别加入 2 2 2个。
  2. 在一个最长的间隙中加入 2 2 2个奶牛。
  3. 在开头加入 1 1 1个奶牛。
  4. 在结尾加入 1 1 1个奶牛。

对于这四种方法,我们直接暴力就可以了。时间复杂度为 O ( n ) O(n) O(n)

得分情况

比赛时得了 100 100 100分。

第二题: S o c i a l Social Social D i s t a n c i n g Distancing Distancing 2 2 2

题目

题目描述
由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们的健康。
尽管他尽了最大努力使他的 N 头奶牛们(1≤N≤1000)践行“社交距离”,还是有许多奶牛不幸染上了疾病。编号为 1…N 的奶牛们分别位于一条长直道路上的不同位置(相当于一维数轴),奶牛 i 位于位置 xi。Farmer John 知道存在一个半径 R,任何与一头被感染的奶牛距离不超过 R 单位的奶牛也会被感染(然后会传染给与其距离 R 单位内的奶牛,以此类推)。
不幸的是,Farmer John 并不确切知道 R 的值。他只知道他的哪些奶牛被感染了。给定这个数据,求出起初感染疾病的奶牛的最小数量。

输入
输入的第一行包含 N。以下 N 行每行用两个整数 x 和 s 描述一头奶牛,其中 x 为位置(0≤x≤10^6),s 为 0 表示健康的奶牛,1 表示染病的奶牛,并且所有可能因传播而染病的奶牛均已染病。

输出
输出在疾病开始传播之前已经得病的奶牛的最小数量。

样例输入
6
7 1
1 1
15 1
3 1
10 0
6 1

样例输出
3

数据范围限制

提示
在这个例子中,我们知道 R<3,否则位于位置 7 的奶牛会传染给位于位置 10 的奶牛。所以,至少 3 头奶牛初始时已被感染:位于位置 13 的两头奶牛中的一头,位于位置 67 的两头奶牛中的一头,以及位于位置 15 的奶牛。

解题思路

这道题我们首先要计算出 R R R的值。
如何求 R R R呢?
我们其实可以发现, R R R就是最小的两个不同的状态的位置之差。
也就是
R = m i n ( x i − x j ) ( j < i , s i ≠ s j ) R=min(x_i-x_j)(j<i,s_i\not=s_j) R=min(xixj)(j<i,si=sj)
那么我们只要先排序在计算就行了。
我们现在要求的是疾病开始传播之前已经得病的奶牛的最小数量。
先算出一共有多少块得病的,设为 A A A
块的定义是,一连串 1 1 1,没有 0 0 0
比如: 110101 110101 110101
这个字符串就有 3 3 3块,每一块的长度分别为 2 2 2 1 1 1 1 1 1
再算出符合 R R R的的块数,设为 B B B
答案就是 A + B A+B A+B
具体为什么可以用样例来试一下。

得分情况

比赛时 100 100 100分。

第三题: C o w n t a c t Cowntact Cowntact T r a c i n g Tracing Tracing

题目

题目描述
由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们(编号为 1…N)的健康。最近,Farmer John 对他的所有奶牛进行了检测,发现有一部分奶牛对该疾病的检测结果呈阳性。利用牛棚内的视频监控,他得以查看最近的奶牛之间的互动行为,结果发现奶牛们互相打招呼时,她们会握蹄,不幸的是这是一种会将疾病从一头奶牛传播给另一头奶牛的行为。Farmer John 汇总了一个添加了时间戳的清单,每条数据的形式为 (t,x,y),表示在时间 t,奶牛 x 与奶牛 y 握了蹄。Farmer John 同时还知道以下信息:
(一)他的农场上恰有一头奶牛最初带有携带疾病(我们将这头奶牛称为“零号病人”)。
(二)一旦一头奶牛被感染,她会在接下来的 K 次握蹄中传染疾病(可能会与同一头奶牛握蹄多次)。握蹄 K 次后,她不再在此后的握蹄中传染疾病(因为此时她意识到了她会传染疾病,于是会仔细地洗蹄)。
(三)一旦一头奶牛被感染,她会持续处于被感染状态。
不幸的是,Farmer John 不知道他的 N 头奶牛中的哪一头是零号病人,也不知道 K 的值!基于他的数据,请帮助他缩小这些未知量的范围。保证至少有一种可能的情况。

输入
输入的第一行包含 N(2≤N≤100)和 T(1≤T≤250)。下一行包含一个长为 N 的字符串,每个字符均为 01,表述目前 Farmer John 的 N 头奶牛的状态——0 表示一头健康的奶牛,1 表示一头染病的奶牛。以下 T 行每行包含 Farmer John 的互动清单中的一条记录,由三个整数 t、x 和 y组成,其中 t 为一次互动发生的正整数时间(t≤250),x 和 y 为范围 1…N 内的不同整数,表示时间 t 握蹄的两头奶牛。在每一时刻至多只有一次互动发生。

输出
输出一行,包含三个整数 x、y 和 z,其中 x 为可能为零号病人的奶牛数量,y 为与数据一致的最小可能 K 值,z 为与数据一致的最大可能 K 值(如果通过数据无法推断 K 的上界,z 输出 "Infinity")。注意可能有 K=0。

样例输入
4 3
1100
7 1 2
5 2 3
6 2 4

样例输出
1 1 Infinity

数据范围限制

提示
唯一可能是零号病人的是奶牛 1。对于所有的 K>0,奶牛 1 在时刻 7 感染奶牛 2,而奶牛 3 和奶牛 4 均不会被感染。

解题思路

这道题的方法是暴力枚举。
我们直接枚举 0 0 0号病人和 K K K,然后判断是否正确。
具体判断:
我们先把 0 0 0号病人给标记为有病,然后看是否可以传染(次数 + 1 +1 +1还是小于等于 K K K),如果可以,就把那个跟他握手的人标记为有病。
最后只要看一下最后标记的是否与输入的一致,就行了。

得分情况

比赛时 100 100 100分。

总结:

这次比赛难度不算大,下次继续努力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值