[Acwing | 蓝桥 ] 2868. 子串分值 贡献思想

前言

传送门 :

思路

结论 : 当前 字符 在该子串中的贡献为 ( i − p r e [ i ] ) ∗ ( n x t [ i ] − i ) (i-pre[i])*(nxt[i]-i) (ipre[i])(nxt[i]i)

解释 :

对于当前 以 i i i开头的子串,最多可以构造出 ( n x t [ i ] − i ) (nxt[i] - i) (nxt[i]i)的串

例如 :
2 , 3 , 4 , 5 2,3,4,5 2,3,4,5

当前 i = 2 , n x t [ i ] = 5 i=2,nxt[i]=5 i=2,nxt[i]=5则可以构造出 5 − 2 = 3 5-2=3 52=3个子串
2 2 2
2 , 3 2,3 2,3
2 , 3 , 4 2,3,4 2,3,4

因此在于前面的数 根据乘法原理即可得上面的表达式

因此问题转换为 **求 n x t [ i ] nxt[i] nxt[i] p r e [ i ] pre[i] pre[i]**即可

我们只需要 O n On On的遍历即可

Mycode

const int N =  1e5+10;
int pre[N];
int nxt[N];
int last[N];

void solve(){
	string s;cin>>s;
	
	memset(last,-1,sizeof last);
	for(int i = 0;i<s.size(); i ++ ){
		pre[i] = last[s[i] -'a'];
		last[s[i]-'a'] = i ;
	}
	
	
	for(int i = 0 ;i < s.size();i++) last[i] = s.size();
	
	for(int i=s.size()-1;i>=0;i -- ){
		nxt[i] =  last[s[i] -'a'];
		last[s[i] - 'a']  = i ;
	}
	
	ll ans = 0 ;
	for(int i = 0 ;i<s.size();i++){
		ans+=1ll*(i-pre[i])*(nxt[i]-i);
	}
	
	cout<<ans<<endl;
	
}
### 回答1: 蓝桥测试数据大小为60.06 MB。数据的大小通常是指数据占用的存储空间大小。在计算机中,数据以二进制的形式存储,每个二进制位(位)可以表示一个0或1,8个二进制位组成一个字节(Byte)。因此,60.06 MB表示数据占用了60.06兆字节的存储空间。 蓝桥测试数据大小为60.06 MB,换算成比特(Bits)为480.48兆比特(Mb)。MB(兆字节)和Mb(兆比特)之间的转换关系是:1兆字节(MB)= 8兆比特(Mb)。所以,60.06 MB乘以8得到480.48 Mb。 可以根据数据的大小来估计需要的存储空间和传输时间。传输时间取决于网络速度和文件大小。网络速度通常以比特每秒(bps)或兆比特每秒(Mbps)为单位。如果网络速度是1 Mbps,将60.06 MB转换成比特(Bits),并除以1 Mbps,可以得到传输该数据所需的时间。根据计算,以1 Mbps的传输速度传输60.06 MB的数据需要约480.48秒。 综上所述,蓝桥测试数据大小为60.06 MB,换算成比特为480.48 Mb。传输该数据所需的时间取决于网络速度,根据1 Mbps的传输速度估计,大约需要480.48秒。 ### 回答2: 蓝桥测试数据的大小为60.06MB。MB是存储容量的单位,表示兆字节。60.06MB大约相当于60060000字节。这个大小可以用来评估蓝桥测试数据的存储需求。根据文件类型和内容的不同,60.06MB可以容纳不同数量和大小的文件。例如,对于文本文件而言,这个大小可以容纳非常大的文本文件,大约相当于60000页的纸质文档。对于音频文件或视频文件而言,这个大小可能只能容纳数分钟的内容,具体取决于文件的编码和比特率。总的来说,60.06MB的大小在当前计算机及存储技术下不算特别大,但也不小。根据具体的使用场景和需要,我们可以相应地调整存储设备的容量,以便满足对蓝桥测试数据的存储和传输需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值