蓝桥杯 第 1 场 小白入门赛

目录

1.蘑菇炸弹

2.构造数字

3.小蓝的金牌梦

4.合并石子加强版

5.简单的LIS问题

6.期望次数


1.蘑菇炸弹

我们直接依照题目 在中间位置的数进行模拟即可

void solve(){
   
    cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    
    int ans=0;
    for(int i=2;i<n;i++){
        if(a[i]>=a[i-1]+a[i+1]) ans++;
    }
    
    cout<<ans<<endl;
    return ;
}

2.构造数字

我们需要构造的数字最大,由于数位已经告诉我们,所以明显的有一个贪心的策略:从最高位置开始从最大的数开始遍历是否可以填可以填减去看下一位即可

void solve(){
   
    cin>>n>>m;
    
    for(int i=1;i<=n;i++){
    	for(int j=9;j>=0;j--){
    		if(m>=j){
    			cout<<j;
    			m-=j;
    			break;
    		}
    	}	
    }
    return ;
}

3.小蓝的金牌梦

我们有一个错误的想法就是找出最大的质数x然后直接求长度x的即可,为什么是错误的呢?因为题目中的元素带有负数,所以我们要求出所有满足的来比较最大值,我们可以考虑使用线性筛来求出所有的质数然后前缀和来求解即可

vector<int> primes;
int cnt;

void solve(){
   
    cin>>n;
    
    vector<LL> a(n+5);
    for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];
    
    auto get = [&](){
    	vector<bool> st(n+5);
    	for(int i=2;i<=n;i++){
    		if(!st[i]){
    			primes.push_back(i);
    			cnt++;
    		}
    		for(int j=0;primes[j]<=n/i;j++){
    			st[i*primes[j]]=true;
    			if(i%primes[j]==0) break;
    		}
    	}
    };
    
    get();
    LL ans=-1e18;// 注意初始化防止过小
   	for(int i=1;i<=n;i++){
   		for(auto&v:primes){
   			if(i<v) break;
   			ans=max(ans,a[i]-a[i-v]);
   		}
   	}
   	
   	cout<<ans<<endl;
    return ;
}

4.合并石子加强版

首先我们不要直接先入为主认为是区间dp,区间dp的时间复杂度一般是n^3也不现实,我们接着找是不是具有什么性质找最简模型

a  b  c  -> 

1: 先左后右  a*b+(a+b)*c = a*b+a*c+b*c

2: 先右后左  b*c+(b+c)*a = a*b+a*c+b*c

我们可以发现无论左右结果不会变的那么也就是我们这个结果是不受操作所影响的,所以我们选择最优的操作直接从左到右即可,注意数据范围很大所以我们考虑要使用__int128来处理

void solve(){
   
    cin>>n;
    
    vector<LL> a(n+5);
    
    __int128 res=0;
    
    for(int i=1;i<=n;i++) cin>>a[i];
    
    LL pre=a[1];
    for(int i=2;i<=n;i++){
    	res+=a[i]*pre;
    	pre+=a[i];
    }
    
    function<void(__int128)> print = [&](__int128 res){
    	if(res>9) print(res/10);
    	putchar(res%10+'0');
    };
    
    print(res);
    return ;
}

5.简单的LIS问题

题目意思很简单修改一个数然后为0-10^{100}然后求最长上升子序列,我们可以发现数据范围是

3e3可以使用n^2LIS接着就是找一个数修改 我们明显的可以划分为前面和后面来区别,所以

我们求一个前面的最长上升子序列,倒着求一个最长下降子序列拼接,接着考虑单独的最长子序列操作,对于上升子序列把后面的一个数改成比自己大即可,对于改前面的数就需要注意是不是>0(题目特殊限制)

void solve(){
   
    cin>>n;
    vector<int> a(n+5),dp1(n+5,1),dp2(n+5,1);
    
    for(int i=1;i<=n;i++) cin>>a[i];
    
    for(int i=1;i<=n;i++)
    	for(int j=1;j<i;j++)
    		if(a[j]<a[i]) dp1[i]=max(dp1[i],dp1[j]+1);
    
    for(int i=n;i>=1;i--)
    	for(int j=n;j>i;j--)
    		if(a[i]<a[j]) dp2[i]=max(dp2[i],dp2[j]+1);
    
    int ans=dp1[n];
    for(int i=1;i<=n;i++){
    	for(int j=i+2;j<=n;j++){
    		if(a[i]<=a[j]-2){
    			ans=max(ans,dp1[i]+dp2[j]+1);
    		}
    	}
    	if(i!=n) ans=max(ans,dp1[i]+1);
    	if(i!=1 && a[i]!=0) ans=max(ans,dp2[i]+1);
    }
    
    cout<<ans<<endl;
    	
    
    return ;
}

考虑提升数据范围就使用nlogn同时需要存在来这个时候的最大或者最小值以及数量

void solve(){
   
    cin>>n;
    
    vector<int> a(n),A(n),B(n),cp(n),cl(n);
    
    for(auto&v:a) cin>>v;
   
    vector<int> pre,last;
    
    for(int i=0;i<n;i++){
        int v=a[i];
        if(pre.empty()||v>pre.back()) pre.push_back(v);
        else pre[lower_bound(pre.begin(),pre.end(),v)-pre.begin()]=v;
        A[i]=pre.back();// 表示到这个点的时候的最大值是多少
        cp[i]=pre.size();// 表示到这个点的时候最长上升子序列的长度都是多少
    }
    
    reverse(a.begin(),a.end());
    
    int ans=pre.size();
    
    for(int i=0;i<n;i++){
        int v=a[i];
        if(last.empty()||v<last.back()) last.push_back(v);
        else last[lower_bound(last.begin(),last.end(),v,greater<int>())-last.begin()]=v;
        B[n-i-1]=last.back();//表示到这个点的最小值是多少
        cl[n-i-1]=last.size();// 表示这个点的长度是多少
    }
    
    
    for(int i=0;i<n-1;i++){
        if(i && A[i-1]<=B[i+1]-2){
            ans=max(ans,cp[i-1]+cl[i+1]+1);
        }
        ans=max(ans,cp[i]+1);
        if(i && B[i]!=0) ans=max(ans,cl[i]+1);
    }
    
    cout<<ans<<endl;
    return ;
}

6.期望次数

我们可以知道和是一个概率dp,依照题目意思我们定义状态为当前 为x是期望为dp[x](x==i)

1.当i>=m 时 dp[i]=0;

2.当i<m时  dp[i]=1+\frac{\sum_{j=1}^{n} a_j * dp[i*j](i*j<m))}{sum}

进行变形之后得到答案dp[i]=\frac{(sum+\sum_{j=1}^{n}a_j*dp[i*j](i*j<m)))}{sum-a[1]}

其中sum是a_i之和,接着就可以按照公式倒着递推即可(注意逆元之类的操作)

LL qmi(LL a,LL b,LL p){
	LL res=1;
	while(b){
		if(b&1) res=res*a%p;
		b>>=1;
		a=a*a%p;
	}
	return res;
}

LL inv(LL x){
	return qmi(x,mod-2,mod);
}

void solve(){
   
    cin>>n>>m;
    vector<LL> dp(m);
    vector<int> a(n);
    LL sum=0;
    for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i];
    for(int i=m-1;i>=1;i--){
    	for(int j=2;j<=n&&i*j<m;j++){
    		dp[i]+=a[j]*dp[i*j];
    		dp[i]%=mod;
    	}
    	(dp[i]+=sum)%mod;
    	dp[i]=dp[i]*inv(sum-a[1])%mod;
    } 
    cout<<dp[1]<<endl;
    return ;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

氢气泄漏检测仪使用方法:守护安全,从细节开始

随着科技的发展&#xff0c;我们的生活和工作环境中充满了各种潜在的危险。其中&#xff0c;氢气作为一种清洁能源&#xff0c;其使用日益广泛&#xff0c;但同时也带来了泄漏的风险。为了确保我们的安全&#xff0c;了解并正确使用氢气泄漏检测仪至关重要。下面将详细介绍氢气…

Optimism的挑战期

1. 引言 前序博客&#xff1a; Optimism的Fault proof 用户将资产从OP主网转移到以太坊主网时需要等待一周的时间。这段时间称为挑战期&#xff0c;有助于保护 OP 主网上存储的资产。 而OP测试网的挑战期仅为60秒&#xff0c;以简化开发过程。 2. OP与L1数据交互 L1&#xf…

STM32学习笔记二——STM32时钟源时钟树

目录 STM32芯片内部系统架构详细讲解&#xff1a; 1.芯片内部混乱电信号解决方案&#xff1a; 2.时钟树&#xff1a; 1.内部RC振荡器与外部晶振的选择 2. STM32 时钟源 3.STM32中几个与时钟相关的概念 4.时钟输出的使能及其流程 5.时钟设置的基本流程 时钟源——单片机…

上海亚商投顾:创业板指失守1600点 全市场超5000只个股下跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指跌超2%&#xff0c;创业板指失守1600点&#xff0c;续创年内新低。脑机接…

C语言KR圣经笔记 6.6 表查询 6.7 typedef

6.6 表查询 为了说明结构体的更多方面&#xff0c;本节我们来写一个表查询功能包的内部代码。在宏处理器或编译器的符号表管理例程中&#xff0c;这个代码是很典型的。例如&#xff0c;考虑 #define 语句&#xff0c;当遇到如下行 #define IN 1 时&#xff0c;名称 IN 与其对…

n-皇后-dfs

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner;public class Main {static int n,N 20; //这里只会用到2 * n - 1的格子,开大点保险static char[][] g new c…

Makefile编译原理 makefile中的include关键字

一.makefile中的include关键字 类似C语言中的include 将其他文件的内容原封不动的搬入当前文件 make对include关键字的处理方式&#xff1a; 在当前目录搜索或指定目录搜索目标文件 搜索成功&#xff1a;将文件内容搬入当前makefile中 搜索失败&#xff1a;产生警告&…

聚观早报 | 360 AI搜索App上线;岚图汽车与京东达成合作

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月30日消息 360 AI搜索App上线 岚图汽车与京东达成合作 三星电子在硅谷新设实验室 小米平板7系列参数曝光 Spa…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

代码随想录算法刷题训练营day20

代码随想录算法刷题训练营day20&#xff1a;LeetCode(654)最大二叉树、LeetCode(617)合并二叉树、LeetCode(700)二叉搜索树中的搜索、LeetCode(700)二叉搜索树中的搜索、LeetCode(98)验证二叉搜索 LeetCode(654)最大二叉树 题目 代码 import java.util.Arrays;/*** Definit…

MATLAB有限元应用-四边形八节点梁受力弯曲

MATLAB在处理平面有限元问题和梁弯曲问题上有很强的能力,主要体现在以下几个方面: 建模与网格划分 MATLAB内置了方便的图形界面工具(pdetoolbox等),可以快速对几何模型进行二维三维网格划分,生成有限元分析需要的网格。 求解器 MATLAB内置了多种求解偏微分方程的有限元求解器…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

钢材表面缺陷YOLOV8,OPENCV调用

【免费】钢材表面缺陷YOLOV8资源-CSDN文库 钢材表面缺陷YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

VScode中使用Xdebug调试PHP

君衍. 一、下载VScode与PHPstudy二、配置PHP环境变量三、PHPstudy中启用xdebug扩展四、打开php.ini&#xff0c;修改配置五、修改vscode配置六、VScode安装相关插件七、配置launch.json八、设置断点&#xff0c;开始调试 一、下载VScode与PHPstudy 首先我们自然是需要搭建环境…

C++ 数论相关题目 博弈论 Nim游戏

给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff0c;先手是否必胜。 输入格式…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树(代码python实践)

文章目录 第5章 决策树—python 实践书上题目5.1利用ID3算法生成决策树&#xff0c;例5.3scikit-learn实例 《统计学习方法&#xff1a;李航》笔记 从原理到实现&#xff08;基于python&#xff09;-- 第5章 决策树 第5章 决策树—python 实践 import numpy as np import pand…

Docusaurus 文档侧边栏增加 New 标识

在使用 Docusaurus 搭建文档站点的时候&#xff0c;我们经常要给某个侧边栏菜单增加一些醒目的标识&#xff0c;比如针对新创建的文档给它一个 New 的标识&#xff0c; 以提醒过来看文档的用户这是一个新增加项或者新特性&#xff08;阅读的时候不要遗漏&#xff09;。 然而这个…

C#: form 添加窗体最小化事件,添加系统托盘图标,点击后可以打开、最小软件窗口

说明&#xff1a; 1.实现窗体在最小化后触发一个事件&#xff0c;可以去实现需要的功能。 2.最小化后软件图标出现在系统右下角的托盘串口。 3.点击托盘口的图标可以实现软件弹出窗口和最小化的切换。 1.参考办法 以下是判断C#窗体最小化到状态栏的状态的方法&#xff1a;…

[AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面&#xff0c;介绍了 Redis 的 5 大基本数据类型&#xff1a;String、List、Hash、Set、Sorted Set&#xff0c;它们可以满足绝大多数的数据存储需求&#xff0c;但是在面对海里数据统计时&#xff0c;它们的内存开销很大。所以对于一些特殊的场景&#xff0c;它们是无…