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

算法——贡献法

前天的AtCoder Beginner Contest 371 D题碰到了这个贡献法,刚好之前的第十一届蓝桥杯省赛第二场真题AcWing 2868. 子串分值也是用的这个方法hh,但是赛时没有搞出来。。。

AcWing 2868. 子串分值

对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中恰好出现一次的字符个数。

例如 f(“aba”)=1f(“aba”)=1,f(“abc”)=3f(“abc”)=3, f(“aaa”)=0f(“aaa”)=0。

现在给定一个字符串 S[0…n−1]S[0…n−1](长度为 nn),请你计算对于所有 SS 的非空子串 S[i…j](0≤i≤j<n)S[i…j](0≤i≤j<n), f(S[i…j])f(S[i…j]) 的和是多少。

输入格式

输入一行包含一个由小写字母组成的字符串 SS。

输出格式

输出一个整数表示答案。

数据范围

对于 20%20% 的评测用例,1≤n≤101≤n≤10;
对于 40%40% 的评测用例,1≤n≤1001≤n≤100;
对于 50%50% 的评测用例,1≤n≤10001≤n≤1000;
对于 60%60% 的评测用例,1≤n≤100001≤n≤10000;
对于所有评测用例,1≤n≤1000001≤n≤100000。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int l[N],r[N],p[26];
char str[N];
typedef long long ll;
int main(){cin>>str+1;int 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;return 0;
}

 这道题里面一个字符只有恰好出现一次才贡献为1,出现了多次就贡献为0;

所以,只有在L[i]~~R[i]区间内贡献1,超过了就贡献0;

然后,乘法原理得res+=(ll)(i-l[i])*(r[i]-i);。。。记得加(ll)强制类型转换。

p[]的作用是临时数组。

AtCoder Beginner Contest 371 D题

E - I Hate Sigma Problems (atcoder.jp)

Problem Statement

You are given a sequence of integers A=(A1,A2,…,AN)A=(A1​,A2​,…,AN​) of length NN. Define f(l,r)f(l,r) as:

  • the number of distinct values in the subsequence (Al,Al+1,…,Ar)(Al​,Al+1​,…,Ar​).

Evaluate the following expression:

∑i=1N∑j=iNf(i,j)i=1∑N​j=i∑N​f(i,j).

Constraints

  • 1≤N≤2×1051≤N≤2×105
  • 1≤Ai≤N1≤Ai​≤N
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

NN
A1A1​ …… ANAN​

Output

Print the answer.

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int a[N],r[N],p[N];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)p[i]=n+1;for(int i=n;i;i--){int t=a[i];r[i]=p[t];p[t]=i;}ll  res=0;for(int i=1;i<=n;i++){res+=(ll)(i-0)*(r[i]-i);}// for(int i=1;i<=n;i++){//用左端点的写法//     int t=a[i];//     l[i]=p[t];//     p[t]=i;// }// ll res=0;// for(int i=1;i<=n;i++){//     res+=(ll)(i-l[i])*(n-i+1);// }cout<<res;return 0;
}

记得开long long 否则过不了 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s 微服务 ingress-nginx 金丝雀发布
  • 几种修改docker默认存储位置的方法
  • Linux:RPM软件包管理以及Yum软件包仓库
  • Leetcode—环形链表||
  • 下载chromedriver驱动
  • openmv与stm32通信
  • 面试经典150题——多数元素
  • 基于深度学习的因果推理与决策
  • AI+RPA 实战揭秘:DrissionPage 助力 CSDN 热榜数据抓取与 AI 结合
  • 跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
  • 2024最新版,人大赵鑫老师《大语言模型》新书pdf分享
  • FPGA与Matlab图像处理之伽马校正
  • RusTitW:大规模语言视觉文本识别数据集(猫脸码客 第190期)
  • CAD图纸加密软件哪个好?10款2024主流CAD图纸加密软件分享!
  • 监控易监测对象及指标之:全面监控FTP服务器
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular2开发踩坑系列-生产环境编译
  • es6
  • JavaScript 奇技淫巧
  • Map集合、散列表、红黑树介绍
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vuex 学习笔记 01
  • 测试如何在敏捷团队中工作?
  • 构建二叉树进行数值数组的去重及优化
  • 离散点最小(凸)包围边界查找
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 通过几道题目学习二叉搜索树
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 移动端高清、多屏适配方案
  • ###STL(标准模板库)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $ git push -u origin master 推送到远程库出错
  • (11)MATLAB PCA+SVM 人脸识别
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (7) cmake 编译C++程序(二)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (六)c52学习之旅-独立按键
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)为什么要选择C++
  • (转载)OpenStack Hacker养成指南
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 8 跨平台高性能边缘采集网关