T1:南州(south)
在那美丽的南州,有一个美丽的砚池,池边有一圈美丽的花,一共有nnn朵。
某一天,有n∗mn∗mn∗m个人去给池边的花施肥,他们每人拿了一袋肥料。但这nnn朵花中有一朵特立独行的花,它只能接受某种特殊的肥料,这n∗mn∗mn∗m个人中有mmm个人拿了这种特殊的肥料。
这些人排成一队,按照一种奇怪的方式来给花施肥。
排头给当前的花施肥然后离开,然后开头的ppp个人走到最后,再把顺时针的下一朵花设定为当前花,重复以上操作,直到所有人都离开。
初始时把特立独行的花的顺时针下一朵花设定为当前花。
这些人希望特殊的肥料能够全施到特立独行的花上。
拿了特殊肥料mmm个人应该排在初始队伍的哪些位置,才能达成目标呢?
由于n∗m<=1e6n*m<=1e6n∗m<=1e6,直接链表模拟即可
T2:六月(june)
六月,是充实的一个月。
六月,有紧张的高考;六月,有紧张的中考;六月,有轻松的期末考;当然,六月还有快乐的儿童节。
六月是如此的充实以至于你的事情太多忙不过来。
你想做的事情可以看做一个字符串a,你需要做的事情可以看做一个字符串b。你需要按序完成所有需要做的事情。你是一个坚定的人,因此你不会改变你想做的事,所以你打算用一个奇奇怪怪的理由来逃掉一些需要做的事。但是由于这个理由很奇怪,所以你只能逃掉连续的一段事情。当然,你还是想要留下一个好印象的,所以你逃掉的事情越少越好。
也就是说,你需要删除b的一个连续子串,使得剩下的部分是a的子序列。
题目长得一匹,都是废话
设f[i]f[i]f[i]表示从头开始bbb串匹配到第iii位aaa串的位置
设g[i]g[i]g[i]表示从尾开始bbb串匹配到第iii位aaa串的位置
考虑把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-RL−R的范围内得出
开一个数组记下这个字符串的所有字符出现的个数
用L[i]表示L的第i位(从高到底,下同)。
用go(pos,lflag,rflag)go(pos,l_flag,r_flag)go(pos,lflag,rflag),表示到了第pospospos位,当前获得的数字是否等于相应的L/RL/RL/R的前缀,返回当前枚举的字符串能否构造出来。
分类讨论:
如果pos==npos == npos==n,则返回truetruetrue。
如果l−flag==1l-flag == 1l−flag==1并且r−flag==1r-flag== 1r−flag==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]<R[pos]L[pos]<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_flaglflag和rflagr_flagrflag有且仅有一个为真,则与上面的讨论类似,先考虑把那个卡边界的弄成不卡的,如果可行直接返回真,不可行就继续卡边界继续枚举。
由于分支最多有两个,所以检验的复杂度为线性。
时间复杂度:O(C(k+9,k)∗k)O(C(k+9,k)*k)O(C(k+9,k)∗k),其中k为R的十进制位数。