备战蓝桥杯---贡献法刷题

话不多说,直接看题:

什么是贡献法?这是一种数学思想,就是看每一个元素对总和的贡献。

1.

我们可以先枚举区间再统计次数,但这显然TLE。我们可以发现,每一个孤独的区间对应一个孤独的牛,因此我们考虑枚举每一个牛对答案的贡献。

我们只要统计一下它左边与右边连续的个数,相乘即可,若左无,那么就是右边的。

分别为L*R,L-1,R-1.

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=500010;
int n;
char str[N];
int l[N],r[N];
int main(){scanf("%d%s",&n,str);for(int i=0,sh=0,sg=0;i<n;i++){if(str[i]=='G') l[i]=sh,sg++,sh=0;else l[i]=sg,sh++,sg=0;}for(int i=n-1,sh=0,sg=0;i>=0;i--){if(str[i]=='G') r[i]=sh,sg++,sh=0;else r[i]=sg,sh++,sg=0;}LL res=0;for(int i=0;i<n;i++){res+=(LL)l[i]*r[i]+max(r[i]-1,0)+max(l[i]-1,0);}cout<<res;
}

2.

我们看一看t中的每一位对答案的贡献,每一轮都是它的字符在S中出现的次数,因此我们选S中出现最多的即可,答案就是x^n,其中x是最长长度的字符有几种,下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100010,mod=1e9+7;
char s[N];
int cnt[100];
int main(){int n;cin>>n;scanf("%s",s);int mx=0,ct=0;for(int i=0;i<n;i++){int t=++cnt[s[i]];if(t>mx) mx=t,ct=1;else if(t==mx) ct++;}long long res=1;for(int i=0;i<n;i++){res=(long long)res*ct%mod;}cout<<res;
}

3.

跟第一题差不多,我们只要统计出它左边倒数第二次出现的位置以及往右第一次出现的位置即可

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
typedef long long LL;
int n;
char str[N];
int l[N],r[N],p[26];
int main(){scanf("%s",str+1);n=strlen(str+1);for(int i=1;i<=n;i++){int t=str[i]-'a';l[i]=p[t];p[t]=i;}for(int i=0;i<26;i++) p[i]=n+1;for(int i=n;i;i--){int t=str[i]-'a';r[i]=p[t];p[t]=i;}LL res=0;for(int i=1;i<=n;i++) res+=(LL)(i-l[i])*(r[i]-i);cout<<res;
}

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

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

相关文章

MySQL 索引底层探索:为什么是B+树?

MySQL 索引底层探索&#xff1a;为什么是B树&#xff1f; 1. 由一个例子总结索引的特点2. 基于哈希表实现的哈希索引3. 高效的查找方式&#xff1a;二分查找4. 基于二分查找思想的二叉查找树5. 升级版的BST树&#xff1a;AVL 树6. 更加符合磁盘特征的B树7. 不断优化的B树&#…

Vulnhub:BOSSPLAYERSCTF: 1

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 dirmap 命令执行漏洞 反弹shell 提权 系统信息收集 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:2f:dd:9…

移动端WEB开发之响应式布局

一、响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 1.2 响应式布局容器 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。原理就是在不同屏幕下&#xff0c;通过媒体…

Linux安装conda

目录 conda是什么简介conda与miniconda、anaconda的关系 安装下载文件bash安装激活软件检查安装是否成功配置镜像源 创建环境 conda是什么 简介 conda是一个开源的包管理器和环境管理器&#xff0c;用于安装、运行和更新包和它们的依赖项。它可以轻松地在计算机上创建隔离的环…

LeetCode-236. 二叉树的最近公共祖先【树 深度优先搜索 二叉树】

LeetCode-236. 二叉树的最近公共祖先【树 深度优先搜索 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;递归判断解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖…

搞学术研究好用免费的学术版ChatGPT网站-学术AI

学术版ChatGPThttps://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&scenelogin 推荐一个非常适合中国本科硕士博士等学生老师使用的学术版ChatGPT&#xff0c; 对接了超大型学术模型&#xff0c;利用AI技术实现学术润色、中英文翻译&#xff0c;学术纠错&#…

利用AI结合无极低码(免费版)快速实现接口开发教程,会sql即可,不需要编写编译代码

无极低码无代码写服务+AI实践 本次演示最简单的单表无代码增删改查发布服务功能,更复杂的多表操作,安全验证,多接口调用,自自动生成接口服务,生成二开代码,生成调用接口测试,一键生成管理界面多条件检索、修改、删除、查看、通用公共接口调用、通用无限级字典调用等后续…

一、Docker部署GitLab(详细步骤)

Docker部署GitLab&#xff08;详细步骤&#xff09; 一、拉取镜像二、启动容器三、修改配置四、修改密码五、浏览器访问 一、拉取镜像 docker安装教程&#xff1a;https://qingsi.blog.csdn.net/article/details/131270071 docker pull gitlab/gitlab-ce:latest二、启动容器 …

通讯录(顺序表)保存数据

在通讯录的基础上加上三个函数实现数据的保存。 分别为录入数据&#xff0c;加入数据与保存数据。 加入数据 先检查通讯录空间是否足够&#xff0c;然后将结构体ab中的数据全部放入通讯录mn中。 注意&#xff1a;字符串的拷贝要使用函数strcpy而不能直接用 加入完成之后将通…

防火墙状态检测和会话机制

FW对TCP&#xff0c;UDP和ICMP协议的报文创建会话

Android java基础_类的继承_android 类继承(2)

运行结果&#xff1a;rootubuntu:/home/topeet/guyilian# javac Ext2.java rootubuntu:/home/topeet/guyilian# java Ext2 10 ustc **子类继承父类的方法和属性都可以进行覆写&#xff0c;我们在子类覆写父类的printInfo方法。**class Person { private int age; public void …

基于Spring Boot和Vue技术框架的虚拟形象装扮商城系统

基于Spring Boot和Vue技术框架的虚拟形象装扮商城系统。该系统能够满足用户在虚拟世界中个性化装扮的需求&#xff0c;提供丰富的商品分类和便捷的购物体验。为实现这一目标&#xff0c;项目分为后台管理系统和前台用户系统两部分。后台管理系统使用Spring Boot作为主要技术框架…