牛客竞赛每日俩题 - Day4

简介: 牛客竞赛每日俩题 - Day4

模拟+辗转相除法

小易的升级之路_牛客题霸_牛客网

思路:


本题的能力值的累加分两种情况,一种是直接相加 bi, 一种是累加当前能力值于 bi 的最大公约数。最大公约数可以通过碾转相除法求得: a 与 b 的最大公约数相当于 b 与 a,b 余数的最大公约数。如果求余结果为 0 , 则 b 为所 求结果

辗转相除法

int gcd(int a,int b)
{
    int c;
    while(c=a%b){
        a=b;
        b=c;
    }
    return b;
}
#include <iostream>
#include<vector>
using namespace std;
int gcd(int a,int b)
{
    int c;
    while(c=a%b){
        a=b;
        b=c;
    }
    return b;
}
int getpw(int n,int power)
{
    vector<int> num(n);
    for(int i=0;i<n;i++)
        cin>>num[i];
    for(int i=0;i<n;i++)
    {
        if(power>=num[i]) power+=num[i];
        else power+=gcd(power,num[i]);
    }
    return power;
}
int main() {
    int n,a,power;
    while(cin>>n>>a)
    {
        power=getpw(n,a);
        cout<<power<<endl;
    }
    return 0;
}

DP作图分析状态方程

计算字符串的编辑距离_牛客题霸_牛客网

思路:


传递公式:


lev[i][j]用来表示字符串a的[1...i]和字符串b[1...j]的levenshtein距离;

插入和删除操作互为逆过程:a删除指定字符变b等同于b插入指定字符变a;

如果a[i] == b[j],则说明a[i]和b[j]分别加入a,b之后不会影响levenshtein距离,lev[i][j] = lev[i-1][j-1] + 0;

如果a[i] != b[j],则需要考虑3种情况的可能:

a中插入字符,即lev[i][j] = lev[i-1][j] + 1;

b中插入字符,即lev[i][j] = lev[i][j-1] + 1;

a[i]替换成b[j],lev[i][j] = lev[i-1][j-1] + 1;

取这4种情况的最小值。

若两个字符相等,即str1[i-1] == str2[j-1],则在这一个位置的编辑距离和上一个字符相同,因此对应的数组dp[i][j]=dp[i-1][j-1];

若两个字符不相等,可删除str1[i-1]这个字符,则dp[i][j] = 1 + dp[i-1][j];删除str2[j-1]这个字符,则dp[i][j] = 1 + dp[i][j-1];修改str1[i-1]使它与str2[i-1]相等,则dp[i][j] = 1 + dp[i-1][j-1]。

#include <iostream>
#include<vector>
using namespace std;
int mind(const string &s1,const string &s2)
{
    if(s1.empty()||s2.empty()) 
        return max(s1.size(),s2.size());
    int len1=s1.size();
    int len2=s2.size();
    vector<vector<int>> f(len1+1,vector<int>(len2+1,0));
    for(int i=0;i<=len1;i++) f[i][0]=i;//初始化距离
    for(int j=0;j<=len2;j++) f[0][j]=j;//表示当另一个字符串为空时,该串的距离
    for(int i=1;i<=len1;i++) 
        for(int j=1;j<=len2;j++)
        {    
            // 判断word1的第i个字符是否与word2的第j个字符相等
            if(s1[i-1]==s2[j-1])
            {
                //相同,距离不需要增加
                f[i][j]=f[i-1][j-1];
            }
            else
            {
                int x=1+min(f[i-1][j],f[i][j-1]);
                //字符不同,需要增删替换,距离+1
                f[i][j]=min(x,1+f[i-1][j-1]);
            }
        }
        return f[len1][len2];
}
int main() {
    string s1,s2;
    while(cin>>s1>>s2)
        cout<<mind(s1,s2)<<endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

找到只出现一次的字符:

时间复杂度O(n^2)

char getFirstOneChar_3(const string& str) {
    for (int i = 0; i < str.size(); ++i) {
        int index1 = str.find(str[i]);
        int index2 = str.rfind(str[i]);
        if (index1 == index2)
            return str[i];
    }
    return -1;
}

O(n)

//hash法 O(n)
char getFirstOneChar_2(const string& str) {
    int hash[256] = {0};
    for (int i = 0; i < str.size(); ++i) //统计字符的次数
        hash[str[i]]++;
    for (int i = 0; i < str.size(); ++i) {
        if (hash[str[i]] == 1)
            return str[i];
    }
    return -1;
}
相关文章
|
网络协议 安全 前端开发
网络技术基础(2)——网络参考模型
【2月更文挑战第6天】网络基础笔记
|
弹性计算 安全 API
阿里云实名认证接口怎么使用的
1.阿里云实名认证接口怎么使用的,1、登录阿里云控制台 2、单击您的会员名(在页面右上角),进入账号管理页面 3、在左侧导航栏中,单击 实名认证 4、在 实名认证 页面,选择认证类型为 个人,再单击 确定 5、单击 个人支付宝认证 栏中 立即认证 按钮。
阿里云实名认证接口怎么使用的
|
SQL 存储 数据库
Flink + Paimon 数据 CDC 入湖最佳实践
Flink + Paimon 数据 CDC 入湖最佳实践
3035 59
|
搜索推荐 算法 数据挖掘
探讨淘宝商品 API 接口:运用及收益
在电商蓬勃发展的今天,淘宝作为国内巨头,拥有海量商品数据和庞大用户群体。淘宝商品API接口为开发者、电商从业者和数据分析师提供了丰富的商品信息,如详情、价格、销量、评价等,助力电商平台搭建、推荐系统优化、市场调研及竞品分析,显著提升业务收益。本文将深入探讨该接口的运用方法与价值,并结合实际代码示例,帮助读者更好地理解和应用。
359 6
|
11月前
|
消息中间件 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——发布/订阅消息的生产和消费
本文详细讲解了Spring Boot中ActiveMQ的发布/订阅消息机制,包括消息生产和消费的具体实现方式。生产端通过`sendMessage`方法发送订阅消息,消费端则需配置`application.yml`或自定义工厂以支持topic消息监听。为解决点对点与发布/订阅消息兼容问题,可通过设置`containerFactory`实现两者共存。最后,文章还提供了测试方法及总结,帮助读者掌握ActiveMQ在异步消息处理中的应用。
502 0
|
Kubernetes 调度 数据库
Kubernetes架构及安装
Kubernetes架构及安装
344 60
|
Ubuntu Linux 芯片
史上最全的LED点灯程序—使用STM32、FPGA、Linux点亮你的LED灯
不知道小伙伴们点亮过多少板子的LED灯,有很多小伙伴留言说讲一下stm32、fpga、liunx他们之间有什么不同,不同点很多,口说无凭,今天就来点亮一下stm32、fpga和liunx板子的led灯,大家大致看一下点灯流程和点灯环境以及点灯流程,就能大概的了解一下三者的区别,可以有选择的去学习!
656 0
史上最全的LED点灯程序—使用STM32、FPGA、Linux点亮你的LED灯
|
人工智能 自然语言处理 测试技术
这些VLM竟都是盲人?GPT-4o、Sonnet-3.5相继败于视力测试
【7月更文挑战第28天】新研究表明VLM在简单视觉任务上的局限性。论文《Vision language models are blind》指出, GPT-4o、Claude-3.5 Sonnet等顶级模型在如判断形状重叠或字母识别等基本任务上表现不佳。另一研究在CVPR&#39;24上介绍了一个新框架, 利用TRUMANS数据集生成精细的人物动作, 包括手部运动, 显示出在复杂场景下的强大能力, 尽管仍面临一定的局限。[论文链接](https://arxiv.org/pdf/2407.06581) [TRUMANS](https://arxiv.org/pdf/2403.08629)
336 4
|
IDE JavaScript Java
Processing介绍及几个python模式下的案例
该文章介绍了Processing这一开源编程语言和环境,主要用于视觉艺术和设计领域,并提供了Python模式下的编程案例。
812 5
|
人工智能 搜索推荐 UED
还没排上SearchGPT?比Perplexity更好用的国产开源平替了解一下?
【8月更文挑战第24天】近日发布的一项研究成果提出了一种革新性的信息检索系统——MindSearch,该系统通过模仿人脑思维方式,有效解决了传统信息检索方法面对复杂查询时的不足。MindSearch利用多代理框架,将用户查询拆解成子问题逐步扩展查询图谱,实现复杂查询的精准定位;通过多层次信息检索,整合不同网页中的相关数据,提高信息提取的准确率;并且能高效处理大规模网页,3分钟内即可检索300多个网页。实验显示,MindSearch不仅提升了响应的深度与广度,还在封闭及开放式问答中表现出色,更符合用户的偏好。不过,MindSearch仍面临查询意图理解、噪音处理及可扩展性等方面的挑战。
258 4