首页 > 其他分享 >3、18 贡献法学习

3、18 贡献法学习

时间:2024-06-19 21:13:23浏览次数:28  
标签:int 18 元素 个数 long 贡献 学习 str

贡献法
计算每一个字符对答案的贡献,然后进行地推求解即可;

题目:

https://www.acwing.com/problem/content/5157/

计算贡献

1、当[变化]的对象存在两个时 尝试[固定]一者
可以发现 对于ρ(“TCG”,”GCA”)而言 三轮操作中的每轮操作是等价的 每轮(第一层循环左移)对结果的贡献是一致的 因此只需要考虑一轮即可
即可以固定s 而只看t的变化

2、当不易思考整体变化时 对[单体]采用[贡献法]思考
可以发现对于t中的每个元素 在左移0 ~ n - 1的全局操作中 其实就是和s中的每一个字符匹配一次
因此若t中的某个字符为’A’ 那么其对结果的贡献即为s中含有的’A’的数量
因此为了使得结果最大 t中的元素因尽可能为s中个数最多的元素
————————————————————————————————————————————————————————————————————————————————————————————————
思路

3、问题即转换为 找到s中个数最多的元素 让t中的每个元素都赋值为该元素即可

当s中最多的元素个数为1个时 只能将所有t中的元素都赋值为该元素 答案为1^n
当s中最多的元素个数为2个时 t中的每个元素都有两种选择 任选其一均可 答案为2^n
当s中最多的元素个数为3个时 t中的每个元素都有三种选择 任选其一均可 答案为3^n
当s中最多的元素个数为4个时 答案为4^n

//题目问的是在出现最多重复元素之和下的字符串的数量;
#include<bits/stdc++.h>
const int N=100010;
const int MOD = 1e9+7; 
using namespace std;
int n;
char str[N];
int cnt[100];
int main()
{
    cin>> n;
    cin >>str;
    // ct 存储最大元素的个数
    // mx 存储最大元素的大小 
    int ct=1,mx=0;
    for (int i = 0; i < n; i ++ ){
        int t=++cnt[str[i]];
        if(t>mx){
            mx=t;
            ct=1;
        }
        else if(mx==t){
            ct++;
        }
    }
    // 贡献法求出最大元素个数的n次方;
    // 具体见      3、思路转换
    long long res=1;
    for (int i = 0; i < n; i ++ ){
        res=(long long )res*ct%MOD;
    }
    cout<< res;
}

题目二:

https://www.acwing.com/problem/content/description/2871/

首先求出左右两边不相等字符的位置,然后根据递推公式:pre[i]*next[j]求出每一个字符的贡献;
注意左右两端无相等字符的情况
相似的分析过程如:

分为三种情况:
1.左右相邻处都有H牛 pre*nest;(两者相乘就是需要丢弃的照片个数)
2.当左边没有H牛时,只计算右边有多少H nest-1;
3.右边没有H牛时,只计算左边有多少H pre-1;
其中 pre 表示的是前面有多少H牛

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
char str[N];
int pre[N],next_1[N],h[26];
int t;
int main(){
    cin >> str+1;
    long long res=0;
    int len=strlen(str+1);
    for (int i=1;i<=len;i++){
        int t=str[i]-'a';
        pre[i]=h[t]-i-1;
        h[t]=i;
    }
    for(int i=0;i<26;i++){
            h[i]=len+1;
        }
    for (int i=len;i>=1;i--){
        int t=str[i]-'a';
        next_1[i]=i-h[t]-1;
        h[t]=i;
    }
    for (int i = 1; i <= len; i ++ ){
        
        res+=(long long)(pre[i]+1)*(next_1[i]+1);
    }
    cout << res;
}

标签:int,18,元素,个数,long,贡献,学习,str
From: https://www.cnblogs.com/yisone/p/18257386

相关文章

  • 基于深度学习的图像压缩
    基于深度学习的图像压缩图像压缩是指将图像数据量减小的同时尽量保留其视觉质量的过程。传统的图像压缩方法(如JPEG、PNG等)已经广泛应用,但随着深度学习技术的发展,基于深度学习的图像压缩方法逐渐显现出其优越性。以下是一些关键方法和模型,它们在图像压缩任务中表现出色。深度......
  • 基于深度学习的图像去噪
    基于深度学习的图像去噪图像去噪是从受噪声污染的图像中恢复原始图像的过程。在传统方法中,常用的去噪技术包括均值滤波、中值滤波和维纳滤波等。随着深度学习技术的发展,基于深度学习的图像去噪方法取得了显著进展。深度学习图像去噪方法1.卷积神经网络(CNN)卷积神经网络是图......
  • 【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互
    目的1:配置ParaView中的PythonShell和Python交互环境ParaView提供了强大的Python接口,允许用户通过Python脚本来控制和操作其可视化功能。在ParaView中,可以通过View>PythonShell菜单打开PythonShell窗口,用于执行Python代码。要确保正确配置Python......
  • 【深度学习驱动流体力学】OpenFOAM 编译完成Bin目录命令计算流体力学详解
    OpenFOAM译完成Bin目录下包含了多个关键命令和工具,用于管理、运行和优化仿真过程中的各个环节。这些命令涵盖了从创建新案例、运行仿真到分析结果的全过程,包括处理网格、设置物理条件、运行求解器和后处理数据等多个方面。每个命令和工具都有其特定的功能和操作方法,用户......
  • 【人工智能】讯飞星火Prompt提示词工程基础学习
    AIPrompt工程师认证学习为什么要创建AI助手1)解决重复性操作,使用Prompt结构化的模板将AI大模型的特定能力固定,一劳永逸2)减少输入,减少反复思考压力3)更稳定,效率提升,可以直接使用已经调整好参数的AI助手所提供的服务(提高生产力)4)便于分享,将助手分享给其他用户共同体验解......
  • Day 25:1807. 替换字符串中的括号内容
    Leetcode1807.替换字符串中的括号内容给你一个字符串s,它包含一些括号对,每个括号中包含一个非空的键。比方说,字符串“(name)is(age)yearsold”中,有两个括号对,分别包含键“name”和“age”。你知道许多键对应的值,这些关系由二维字符串数组knowledge表示,其......
  • 机器学习day03
    机器学习day03超参数选择方法--交叉验证、网格搜索、手写数字识别案例1交叉验证1.1什么是交叉验证?是一种数据集的分割方法,将训练集划分为n份,拿一份做验证集(测试集)、其他n-1份做训练集1.2交叉验证法原理:将数据集划分为cv=4第一次:把第一份数据做验证集,其他数据做训练第......
  • 论如何使用机器学习,预测客户流失率,轻松实现客户精准维护
    01、案例说明首先我们学习最经典的机器学习模型,就是监督学习(SupervisedLearning)中的分类模型。这边使用的是一个电信公司的案例,通过客户的基本资料和一些简单的互动信息,建立一个模型,以预测哪些客户有较高的可能性流失,从而进行补救。因为研究显示得到一个新客户的成本是维......
  • Javascript入门博客【入门复习(学习)使用】
    JavaScript是一门高级,解释形语言,大量用于关于web网站的开发,可以和网页联动做出更多有趣的动画效果。其运行方式大都是嵌入在网页中运行。其实在定义方面如果过你是初学者来学习和这方面相关的知识,知道上面这些就已经足够了。我们可以在浏览器中直接进行对代码的控制,进入浏览器......
  • mybits学习1
    所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:mybits备注(其他): private static SqlSessionFactorysqlSessionFactory;   static {       try {           Stringresource= "mybati......