蓝桥杯 第 1 场 小白入门赛

news2024/12/23 18:28:08

目录

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 ;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp底部栏设置未读红点或角标

pages.json {... // 省略"tabBar": {"color": "#333333","selectedColor": "#3296fa","backgroundColor": "#ffffff","borderStyle": "white","list": [{"pagePat…

【Go】Viper读取配置文件

go get github.com/spf13/viper 1. 设置配置文件的信息 etcd:ip: "192.168.6.106"port: 2379dialTimeout: 3redis:ip: "192.168.6.107"port: 6379password: "root1028"2. 读取配置文件的信息 2.1 通过kv的方式 package mainimport ("fm…

【Tomcat与网络5】再论Tomcat的工作过程与两种经典的设计模式

前面两篇&#xff0c;我们重点分析了Tomcat的容器和连接器的基本设计&#xff0c;今天我们来看一下两个机构如何在service的调度下进行协同工作的。 目录 1.模板模式与Tomcat的重用性设计 2.观察者模式与Tomcat可扩展性设计 1.模板模式与Tomcat的重用性设计 首先&#xff0…

电脑护眼模式怎么设置?4个有效方法保护眼睛!

“我感觉每天使用电脑的时间久了&#xff0c;眼睛总是不太舒服。电脑护眼模式怎么设置呢&#xff1f;有什么比较好用的方法可以推荐吗&#xff1f;” 如果长时间使用电脑&#xff0c;或许会让我们感到用眼疲劳。电脑护眼模式是现代人常用的电脑设置之一&#xff0c;它能有效地减…

通俗易懂三大范式

通俗易懂三大范式 第一范式说的是每个字段不可再分 第二范式说的是不能存在部分依赖&#xff08;不能由联合主键的部分就可以推出其他字段&#xff0c;必须整个联合主键才能推出其他字段&#xff09; 第三范式说的是不能存在间接依赖(A&#xff08;主键&#xff09;→B,B→C…

wordcloud库和jieba库的使用

文章目录 wordcloud库的简单示范使用wordcloud库报错记录anaconda安装第三方jieba库jieba库的简单示范任务 1&#xff1a;三国演义中的常见词汇分布在“三国"这两个隶书字上&#xff0c;出现频率高的词字体大任务 2&#xff1a;三国演义中出现频率前十的人名。必须是以下这…

【日常总结】windows11 设置文件默认打开方式

一、场景 二、实战 Stage 1&#xff1a;打开设置 Stage 2&#xff1a;应用 > 默认应用 > 搜索 .txt Stage 3&#xff1a;修改成notepad &#xff0c;设置默认值即可 一、场景 windows 11 .txt 默认记事本打开 需求&#xff1a;如何使用notepad打开呢 &#xff1f;…

App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制

低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用&#xff0c;本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。 BLE与经典蓝牙的区别可参考&#xff1a;《低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别》…

一张序列图搞懂resilience4j的工作原理

本文主要回答以下几个问题&#xff1a; Spring Cloud与Resilience4j如何集成的&#xff08;spring-cliud-circuitbreaker-resilience4j模块的 Resilience4JAutoConfiguration类实现了主要组件的注入&#xff0c;特别是在Resilience4jBulkheadConfiguration中定义如何自定义fac…

Qt简易的五子棋

五子棋是个简单的小游戏&#xff0c;尝试使用Qt将他做出来&#xff0c;学习时的练习demo。 成果展示 需求分析 五子棋&#xff1a;在棋盘上&#xff0c;黑棋先行&#xff0c;交替下棋&#xff0c;五子练成直线获取胜利。 实现过程 1.棋盘绘制&#xff1a;下棋的第一步肯定是绘制…

ubuntu gedit主题更改

ubuntu16.04 gedit 编辑器又有首选项如何设置主题 这里下载主题 将主题XML复制到 /usr/share/gtksourceview-3.0/styles 文件夹内&#xff1b; 使用gsettings 命令设置喜欢的配色方案&#xff0c;使用方式如下&#xff1a;(实测不带.xml后缀哦) gsettings set org.gnome.gedi…

本地配置Joplin Server用于Joplin笔记同步并实现公网远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

小程序定制开发:解析定制化移动应用的未来

引言 在当今数字化时代&#xff0c;移动应用已经成为人们生活不可或缺的一部分。随着智能手机的普及&#xff0c;移动应用的需求呈现出爆发式增长&#xff0c;企业们也纷纷投身于这场数字化浪潮。然而&#xff0c;众多企业在竞争激烈的市场中&#xff0c;如何突显个性、提高用…

uniapp本地存储日志

uniapp本地存储日志 背景实现代码实现使用查看生成log读取 注意事项尾巴 背景 我们的APP开发完成之后&#xff0c;在我们测试环境或者自测的时候都好好的&#xff0c;但是发布到生产环境客户使用总会出现一些奇奇怪怪的问题。这时候因为没在开发环境&#xff0c;我们无法查看到…

【云原生】docker安全与https加密的超文本传输协议CA证书生成

目录 一、docker安全 二、http与https的区别 三、为什么要使用 SSL 证书&#xff1f; 四、https证书认证的过程 https单向认证的访问流程 https双向认证的访问流程 五、如何获取证书&#xff1f; 六、实操获取证书并验证 1、通过阿里云获取证书 2、通过mkcert获取证书…

Flutter的安装与环境配置

一、下载安装Futter&#xff1a; 1、Flutter中文文档&#xff1a; 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2、下载 Futter SDK&#xff1a; Flutter中文文档 里面有&#xff0c;下载完成之后找个文件夹解压出来&#xff0c;最好不要将 Flu…

GoLang和GoLand的安装和配置

1. GoLang 1.1 特点介绍 Go 语言保证了既能达到静态编译语言的安全和性能&#xff0c;又达到了动态语言开发维护的高效率&#xff0c;使用一个表达式来形容 Go 语言&#xff1a;Go C Python , 说明 Go 语言既有 C 静态语言程序的运行速度&#xff0c;又能达到 Python 动态语…

编程实战实例分享,棋牌室计时计费管理系统软件教程

编程实战实例分享&#xff0c;棋牌室计时计费管理系统软件教程 一、前言 以下编程实例以 佳易王棋牌计时计费软件V17.8为例说明 1、开始计时和等待中&#xff0c;图片自动识别&#xff0c;自动匹配 2、开始计时后&#xff0c;系统记录开始时间&#xff0c;并直观显示所用的时…

开源项目MessageNest打造个性化消息推送平台多种通知方式

今天介绍一个开源项目&#xff0c;Message Nest - 可以打造个性化消息推送平台&#xff0c;整合邮件、钉钉、企业微信等多种通知方式。定制你的消息&#xff0c;让通知方式更灵活多样。 开源地址&#xff1a; https://github.com/engigu/Message-Push-Nest 测试平台 系统&am…

网安人必看!CISP家族顶流证书攻略

网络安全已成为当今的热门领域&#xff0c;证书在职业发展中的重要性不言而喻。但是&#xff0c;证书市场五花八门&#xff0c;选择适合自己的证书可是个大问题。别担心&#xff0c;今天我们就来聊聊CISP家族的几个热门认证&#xff0c;让你在网络安全领域的发展更加顺利&#…