Noip 模拟 5 2018/10/22

探讨了三个算法问题,包括如何安排施肥者位置确保特殊肥料覆盖特定花朵,通过字符串匹配最小化任务逃避,以及在数字组合变化后的剩余可能性评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1:南州(south)
在那美丽的南州,有一个美丽的砚池,池边有一圈美丽的花,一共有nnn朵。
某一天,有n∗mn∗mnm个人去给池边的花施肥,他们每人拿了一袋肥料。但这nnn朵花中有一朵特立独行的花,它只能接受某种特殊的肥料,这n∗mn∗mnm个人中有mmm个人拿了这种特殊的肥料。
这些人排成一队,按照一种奇怪的方式来给花施肥。
排头给当前的花施肥然后离开,然后开头的ppp个人走到最后,再把顺时针的下一朵花设定为当前花,重复以上操作,直到所有人都离开。
初始时把特立独行的花的顺时针下一朵花设定为当前花。
这些人希望特殊的肥料能够全施到特立独行的花上。
拿了特殊肥料mmm个人应该排在初始队伍的哪些位置,才能达成目标呢?

由于n∗m&lt;=1e6n*m&lt;=1e6nm<=1e6,直接链表模拟即可

T2:六月(june)
六月,是充实的一个月。
六月,有紧张的高考;六月,有紧张的中考;六月,有轻松的期末考;当然,六月还有快乐的儿童节。
六月是如此的充实以至于你的事情太多忙不过来。
你想做的事情可以看做一个字符串a,你需要做的事情可以看做一个字符串b。你需要按序完成所有需要做的事情。你是一个坚定的人,因此你不会改变你想做的事,所以你打算用一个奇奇怪怪的理由来逃掉一些需要做的事。但是由于这个理由很奇怪,所以你只能逃掉连续的一段事情。当然,你还是想要留下一个好印象的,所以你逃掉的事情越少越好。
也就是说,你需要删除b的一个连续子串,使得剩下的部分是a的子序列。

题目长得一匹,都是废话
f[i]f[i]f[i]表示从头开始bbb串匹配到第iiiaaa串的位置
g[i]g[i]g[i]表示从尾开始bbb串匹配到第iiiaaa串的位置
考虑把aaa串分成两部分,一半由bbb串从头开始匹配,
另一半由bbb串从尾开始匹配,答案即为头尾两部分的长度
由于f[i],g[i]f[i],g[i]f[i],g[i]都满足单调,O(n)O(n)O(n)扫一遍即可
考场智障写二分

T3:荔枝丹(litchi)
祝阿姨得到了许多许多的荔枝丹,每个荔枝丹上都有一个0到9之间的数字。祝阿姨把它们分成许多组,每组表示一个数,且所有组表示的数字合起来恰好是[L,R]内的所有数。
祝阿姨知道悦色老师特别喜欢吃荔枝丹,于是邀请了悦色老师来吃荔枝丹。悦色老师最喜欢吃有数字0的荔枝丹了,她吃掉了所有数字为0的荔枝丹。
祝阿姨想知道还剩下多少不同的组。注意悦色老师吃完后,荔枝丹就无序了,也就是说123和321是同样的组。

如果补上前缀0,使得所有数字位数相等,并把数字看成字符串,并把字符排序,那么问题等价于有多少不同的字符串。
可以发现,字符串的情况很少,一定不超过C(27,9)=4686824C(27,9)=4686824C(27,9)=4686824
然后考虑怎么判断能否由L−RL-RLR的范围内得出
开一个数组记下这个字符串的所有字符出现的个数
用L[i]表示L的第i位(从高到底,下同)。
go(pos,lflag,rflag)go(pos,l_flag,r_flag)goposlflagrflag,表示到了第pospospos位,当前获得的数字是否等于相应的L/RL/RL/R的前缀,返回当前枚举的字符串能否构造出来。
分类讨论:
如果pos==npos == npos==n,则返回truetruetrue
如果l−flag==1l-flag == 1lflag==1并且r−flag==1r-flag== 1rflag==1,进一步讨论:
如果L[pos]==R[pos]L[pos] == R[pos]L[pos]==R[pos],则在第pospospos位只能是L[pos]L[pos]L[pos],然后进行go(pos+1,1,1)go(pos+1, 1, 1)go(pos+1,1,1)
如果L[pos]&lt;R[pos]L[pos]&lt;R[pos]L[pos]<R[pos],那么如果可以放[L[pos]+1,R[pos]−1][L[pos]+1,R[pos]-1][L[pos]+1,R[pos]1]中的数字,那么一定可行;如果不可以,则尝试放L[pos]L[pos]L[pos]并继续go(pos+1,1,0)go(pos+1,1,0)go(pos+1,1,0)或放R[pos]R[pos]R[pos]并继续go(pos+1,0,1)go(pos+1,0,1)go(pos+1,0,1)
如果lflagl_flaglflagrflagr_flagrflag有且仅有一个为真,则与上面的讨论类似,先考虑把那个卡边界的弄成不卡的,如果可行直接返回真,不可行就继续卡边界继续枚举。
由于分支最多有两个,所以检验的复杂度为线性。
时间复杂度:O(C(k+9,k)∗k)O(C(k+9,k)*k)O(C(k+9,k)k),其中k为R的十进制位数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值