第一行输入一个正整数
代表字符串的长度。
第二行输入一个长度为
、由字符
和
构成的字符串
。
输出一个整数,代表所有长度不小于
的连续子串的权值之和。由于答案可能很大,请将答案对
取模后输出。
3 001
4
在这个样例中,长度为
的连续子串有
个:
,权值为
;
,权值为
;
,权值为
。
长度为
的连续子串有
个:
,权值为
;
,权值为
;
,权值为
。
所有长度不小于
的连续子串的权值之和为
。
#超时了,思路应该没问题;主要是遍历以每个字符为开头的,长度大于2小于等于n的权重,再求和 n = int(input()) s = str(input()) s_ring = s+s s_ring_01sum = 0 for i in range(n):#头尾字符串的每一个字符为开头取取子串 temp_01sum = 0#索引为I开头的子串取权重之和 value = 0#i开头长度为j+1的子串权重; if s_ring[i] == '0': cnt_0 = 1 cnt_1 = 0 else: cnt_0 = 0 cnt_1 = 1 for j in range(1,n):#计算子串大于二的权重; if s_ring[i+j] == '0': cnt_0 +=1 else: cnt_1 += 0 value += cnt_0 print(value) temp_01sum +=value s_ring_01sum += temp_01sum M = 10**9+7 print(s_ring_01sum%M)