贡献法总结

贡献法的核心在于,分析每个元素对答案的贡献。

1.孤独的照片

4261. 孤独的照片 - AcWing题库

最暴力的做法是枚举出所有情况,时间复杂度是O(n^{2}),显然会超。

我们用贡献法的方式来思考。

对于某一头牛,假设它为G牛,它的左边距离上一头G牛的间隔为l,右边距离下一头G牛的间隔为r,那么它可以贡献出l*r+(l-1)+(r-1)张孤独的照片。l*r表示在G牛左右都有牛,左边有l(选1头牛、2头牛......l头牛)种可选的情况,右边有r(选1头牛、2头牛......r头牛)种可选的情况;(l-1)表示G牛只有左边有牛,这时有(l-1)种(2头牛、3头牛......l头牛)可选的情况,右边同理。

分析完贡献后,我们的结果就是每一头牛对答案的贡献之和。

#include<iostream>
using namespace std;
const int N=5e5+10;
typedef long long ll;
int n;
char a[N];
int l[N],r[N];
int main()
{scanf("%d",&n);scanf("%s",a+1);for(int i=1,h=0,g=0;i<=n;i++){if(a[i]=='H') l[i]=g,g=0,h++;else if(a[i]=='G') l[i]=h,h=0,g++;}for(int i=n,h=0,g=0;i>=1;i--){if(a[i]=='H') r[i]=g,g=0,h++;else if(a[i]=='G') r[i]=h,h=0,g++;}ll res=0;for(int i=1;i<=n;i++){res+=(ll)l[i]*r[i];if(l[i]>=2) res+=l[i]-1;if(r[i]>=2) res+=r[i]-1;}printf("%lld",res);
}

2.子串分值

2868. 子串分值 - AcWing题库

同样地,我们分析每个元素对结果的贡献。

对于某个元素来说,假设它离上一个与它相同的元素距离为l,离下一个与它相同的元素距离为r,那么它的贡献应该是(l+1)*(r+1)。

对于这道题来说,我们处理l和r是不那么容易的,因为元素的种类很多,但是我们可以处理元素左右离它最近的相同元素的位置,假设左边是l,右边是r,当前元素是k,那么左边的个数是(k-l-1+1)=k-l,右边是r-k。

这里还需要注意一下边界,如果当前元素左边没有相同元素,我们默认l=0,如果右边没有相同元素,默认r=n+1。

#include<iostream>
#include<cstring>
using namespace std;
const int N=1e5+10;
typedef long long ll;
char a[N];
int l[N],r[N];
int last[N];
int main()
{scanf("%s",a+1);int n=strlen(a+1);for(int i=1;i<=n;i++){int cur=a[i]-'a';l[i]=last[cur];last[cur]=i;}for(int i=0;i<30;i++) last[i]=n+1;for(int i=n;i>=1;i--){int cur=a[i]-'a';r[i]=last[cur];last[cur]=i;}ll res=0;for(int i=1;i<=n;i++) {res+=(ll)(i-l[i])*(r[i]-i);}printf("%lld",res);
}

3.牛的基因学

5154. 牛的基因学 - AcWing题库

对于示例TCG和GCA来说,假设我们固定了TCG,只移动GCA,那么,GCA中的G必须会与TCG中的G配对1次,GCA中的C必须会和TCG中的C配对一次。

同理,当GCA移动到CAG、AGC时,情况一样。

因此在移动过程中,最大总次数是2*3=6。

我们来看一组新的样例TTCG和GCAT,假设固定了TTCG,只移动GCAT,我们可以发现,GCAT中的T一定会和TTCG中的T配对2次,T一定会配对一次,C一定会配对一次。

因此在移动过程中,最大总次数是(2+1+1)*3=12.

也就是说,我们的最大总次数只和字母在s中出现的次数有关。

即:如果GCAT变为GCTT,则最大总次数是(2+2+1+1)*3=18.

对我们来说,t数组是可以自行构造的,要达到真正的最大总次数,我们应该使t数组的组成元素和s数组中出现次数最多的元素一致。

也就是说,如果s数组中出现次数最多的元素有1个,那t数组的每个元素只有1种选择,最后的答案是1^{n},如果s数组种出现次数最多的元素有2个,那么t数组的每个元素有2种选择,最后的答案是2^{n},以此类推,就可以解出我们的题目了。

#include<iostream>
#include<unordered_map>
#include<algorithm>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int n;
char a[N];
int cnt[5];
unordered_map<char,int> ha;
const int mod=1e9+7;
bool cmp(int x,int y)
{return x>y;
}
int main()
{scanf("%d",&n);scanf("%s",a+1);ha['A']=1;ha['G']=2;ha['C']=3;ha['T']=4;for(int i=1;i<=n;i++)cnt[ha[a[i]]]++;sort(cnt+1,cnt+1+4,cmp);int num=1;int maxx=cnt[1];for(int i=2;i<=4;i++) if(cnt[i]==maxx) num++;ll res=1;for(int i=1;i<=n;i++){res*=num;res%=mod;}printf("%lld",res);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522118.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计网】TCP协议安全与风险:深入探讨网络通信的基石

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 &#x1f310;前言 &#x1f512;正文 TCP (Transmission Control Protocol): UDP (User Datagram Protocol): HTTP (Hypertext Transfer …

“一键批量自定义重命名:轻松驾驭文件海洋,让管理变得如此简单!“

在信息爆炸的时代&#xff0c;我们每天都会接触到大量的文件&#xff0c;从文档、图片到视频、音频等&#xff0c;各种类型、各种格式的文件充斥着我们的电脑和移动设备。如何有效地管理和组织这些文件&#xff0c;成为了我们不得不面对的问题。今天&#xff0c;我们为您带来了…

掌握Python操作Word:从基础到高级全覆盖

掌握Python操作Word&#xff1a;从基础到高级全覆盖 引言Python操作Word的基础文档的创建与打开文档的基本操作 创建和打开Word文档创建新的Word文档打开现有文档读取文档内容修改现有文档 编辑文档内容添加和编辑文本设置格式插入标题 处理文档结构操作段落列表的处理表格的操…

高校水电预付费系统有什么作用?

Hey小伙伴们&#xff0c;今天来聊聊咱们大学里的一个超级实用的设施——水电预付费系统&#xff01;你是不是还在为每个月的水电账单烦恼呢&#xff1f;别担心&#xff0c;这个系统就是你的生活小帮手&#xff01; 首先&#xff0c;想象一下这 样的场景&#xff1a;开学初&…

网站建设大概需要多少钱?费用是多少?怎么样

1、网站建设详细报价单。 建立一个网站需要多少钱&#xff1f; 公司不同&#xff0c;地点不同&#xff0c;技术不同&#xff0c;需求不同&#xff0c;价格也不同。 1、不要尝试用几百块钱建立一个网站&#xff0c;2、几千块做一个普通的网站&#xff0c;3、几万块做一个更好的…

PostgreSQL容器安装

docker中的centos7中安装 选择对应的版本然后在容器中的centos7中执行下面命令 但是启动容器的时候需要注意 开启端口映射开启特权模式启动init进程 docker run -itd --name centos-postgresql -p 5433:5432 --privilegedtrue centos:centos7 /usr/sbin/init 启动然后进入后先…

【JAVA】优化if else的几种方式

在代码编写初期&#xff0c;我们写出来的代码&#xff0c;脉络清晰&#xff0c;结构简单。可随着bug或者新需求的出现&#xff0c;状态变得越来越多&#xff0c;只能不停地加else来区分&#xff0c;久而久之&#xff0c;判断的次数越来越多&#xff0c;嵌套的层数也越来越深&am…

centos 系统 yum 无法安装(换国内镜像地下)

centos 系统 yum 因为无法连接到国外的官网而无法安装&#xff0c;问题如下图&#xff1a; 更换阿里镜像&#xff0c;配置文件路径&#xff1a;/etc/yum.repos.d/CentOS-Base.repo&#xff08;如果目录有多余的文件可以移动到子目录&#xff0c;以免造成影响&#xff09; bas…

STM32 | Proteus 8.6安装步骤(图文并茂)

01 Proteus 8.6 简介 Proteus 8.6 是一款功能强大的电子设计自动化软件&#xff0c;广泛用于电路设计、仿真和PCB布局。它为电子工程师和学生提供了一个全面的工具集&#xff0c;用于设计和验证各种电路和电子设备。Proteus 8.6 包括了以下几个主要特性&#xff1a; 1. 电路设…

【lua】lua内存优化记录

这边有一个Unity项目用的tolua&#xff0c; 游戏运行后手机上lua内存占用 基本要到 189M&#xff0c; 之前峰值有200多。 优化点1 加快gc频度&#xff1a; 用uwa抓取的lua内存&#xff0c; 和unity的mono很像&#xff0c;内存会先涨 然后突然gc一下&#xff0c;降下来。 这样…

前端学习之HTML(第一天)

什么是HTML HTML是一种用来描述网页的一种语言&#xff0c;HTML不是一种编程语言&#xff0c;而是一种标记语言。 HTML标签 HTML 标签是由尖括号包围的关键词&#xff0c;比如 <html> HTML 标签通常是成对出现的&#xff0c;比如 <b> 和 </b> 标签对中的…

IEEE独立出版 | 院士出席,投递获取免费参会,与院士交流机会!

第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2024&#xff09;2024 5th International Conference on Information Science, Parallel and Distributed Systems2024年5月31-6月2日 | 中国广州 重要信息 大会官网&#xff1a;www.ispds.org 大会时间&…