AcWing 4993. FEB
原题链接
困难
作者:
啥都不会啊
,
2024-02-24 15:44:10
,
所有人可见
,
阅读 20
n=int(input())
s=input().strip('F');#先把两边的都去掉
mi,ma,k=0,n-len(s),len(s)
i=1
while i<k:
if s[i]=='F':
i0=i#记录第一个i的位置
while i<k and s[i]=='F':#连续F
i+=1
if i<k:
'''最少为求每个部分的F两端值
是否相同与中间的F是否为奇数的异或'''
mi+=((s[i0-1]==s[i]) != ((i-i0)&1))
'''
最多为求每个部分的F两端值
是否相同与这个中间的F的个数的和
'''
ma+=i-i0+(s[i0-1]==s[i])
i+=1
'''正常的连续序列的个数'''
nor=sum(s[i] != 'F'and s[i] == s[i-1] for i in range(1,k))
if n!=k:
'''两边有F'''
print(ma-mi+bool(k))
'''能取的个数,bool(k)可以用来考虑全为F的情况,在这种情况下,如果有n个F,那么只有n种可能'''
for _ in range(mi,ma+bool(k)):
print(_+nor)
else:
'''两边没有F,取值为公差为2的等差数列'''
print((ma-mi+2)>>1)
for _ in range(mi,ma+1,2):
print(_+nor)