当前位置: 首页 > news >正文

贡献法(C++)

 贡献法的核心思想: 不要一个个子串去算“有多少种字符”,而是反过来想——每个字符能“贡献”给多少个子串

1.子串分值

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int sum=0;
signed main()
{
	cin>>s;
	for(int i=0; i<s.size(); i++) //计算贡献度:字母的贡献度 = (左边的步数 + 1) * (右边的步数 + 1)
	{
		int left=0,right=0;
		for(int j=i-1; j>=0 && s[j]!=s[i]; j--) //计算左边的步数
		{
			left++;
		}
		for(int j=i+1; j<s.size() && s[j]!=s[i]; j++)
		{
			right++;
		}
		sum+=(left+1)*(right+1);
	}
	cout<<sum<<endl;
	return 0;
}

2.子串分值和

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
char s[N];
int pos[27]; //记录该字符上一次出现的位置
signed main()
{
	cin>>s+1; //索引1开始完整读取
	int n=strlen(s+1);
	int res=0;
	for(int i=1; i<=n; i++)
	{	
		int t=s[i]-'a';
		res+=(int)(i-pos[t])*(n-i+1); //n-i+1加一是为了包括自己
		pos[t]=i; //只有最左边的那个会被计入贡献
	}
	cout<<res<<endl;
	return 0;
}

http://www.dtcms.com/a/105127.html

相关文章:

  • w2ui 水平滚动移动 虚拟列 数据丢失
  • 建筑长明灯、长流水成难题?楼宇自控系统来破局
  • forms实现贪吃蛇
  • Python打包大模型文件以及使用Docker进行运行镜像
  • 六、Linux系统 DRM调试工具modetest
  • 【C++】vector的模拟实现和相关接口介绍
  • 通过通道扩展实现 NI-DAQmx 的同步与触发
  • Python FastAPI + Celery + RabbitMQ 分布式图片水印处理系统
  • 软件工程-UML
  • DEBUG:工具简介
  • Python----机器学习(线性回归:自求导的方法实现)
  • Redis 的哨兵模式
  • 蓝桥杯 01游戏
  • 数据结构 哈希表 字符串哈希
  • VMware安装Ubuntu实战分享
  • 【算法学习计划】贪心算法(下)
  • 在ensp进行OSPF+RIP+静态网络架构配置
  • [GESP202503 C++六级题解]:P11963:环线
  • 关于VMware Tools 不再随旧版客户机操作系统的 VMware Workstation 一起提供。
  • 高级java每日一道面试题-2025年3月22日-微服务篇[Nacos篇]-Nacos的主要功能有哪些?
  • TBKDVR硬盘录像机device.rsp命令执行漏洞
  • CISCO路由器配置DHCP中继
  • YOLOv12即插即用-Pconv(风车卷积)
  • QT自定义信号与槽
  • NHANES指标推荐:TyG-BMI
  • 自然语言处理|如何用少样本技术提升低资源语言处理?
  • acwing 5438. 密接牛追踪2
  • MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作
  • Minimind 训练一个自己专属语言模型
  • 什么是BSCI验厂?BSCI验厂的好处?BSCI验厂的意义