【算法科目】2024年第二届全国大学生信息技术认证挑战赛 题解

图像压缩

曾经看到过,这是一道洛谷原题,很可惜我没做过,有点看不懂就没尝试。

原题链接:B3851 [GESP202306 四级] 图像压缩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

因数分解

直接枚举就行了,从2开始找因子,到sqrt(n),从小到大能被除的话一定是素数。

假设a<b<c,且a和c是素数因子,b是合数因子。

由于合数可以由素数因子相乘得到:那么b=d+e,且d和e均小于等于sqrt(b),故从2到sqrt(n)遍历能除的除干净之后,除出来的必然是素数。

对于大于sqrt(n)部分的因子,合数因子必然能分解成小于sqrt(n)的部分,除完之后还有剩下的,那么剩下的就为素数。

Q:有没有可能剩下的素数有两个。

A:两个素数均大于sqrt(n),则乘积大于n,不合法。故最多一个。

最后考虑特殊情况,如果上面循环完了n还不为1,那么n就是素数。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;void solve(){int n;cin>>n;map<int,int>f;int a=n;per(i,2,sqrt(n)){if(a%i==0){int cnt=0;while(a%i==0){a/=i;cnt++;}f[i]=cnt;}}if(a>1)f[a]++;auto it=f.rbegin();for(auto i:f){if(i.se==1){cout<<i.fr<<" ";}else{cout<<i.fr<<"^"<<i.se<<" ";}if(i!=*it){cout<<"* ";}}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

一个数可以分解数质数相乘。

更细化的,这些质数可以是偶数个或者奇数个。如 2 * 3 都只有一个,而 2^2*3,2有两个。

所以我们可以把质数分成 数量为奇数的 和 数量为偶数的。

根据从小到大能除除干净,除出来的是质数,我们可以先分离出数量为偶数的。

    per(i,2,sqrt(n)){int x=i*i;while(n%x==0)f[i]+=2,n/=x;}

假设一个平方质因子都没分离出来,那么n=a*b*c*d a,b,c,d为素数且均为一个。

所以只需要2~sqrt(n)遍历一次,大于sqrt(n)的只有一个,故如果n除完之后大于1,这就是那一个大于sqrt的数。

总复杂度sqrt(n)+sqrt(n),但是这样可以分离出所有的单个因子,有需要的话可以提供更多思路。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;void solve(){int n;cin>>n;map<int,int>f;per(i,2,sqrt(n)){int x=i*i;while(n%x==0)f[i]+=2,n/=x;}per(i,2,sqrt(n)){if(n%i==0){f[i]++;n/=i;}}if(n>1)f[n]++;auto it=f.rbegin();for(auto i:f){if(i.se>=2){cout<<i.fr<<"^"<<i.se<<" ";}else cout<<i.fr<<" ";if(i!=*it){cout<<"* ";}}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

探险

这道题应该才是签到题。不过被榜单带歪了都是先做的 因数分解求和。

可以肯定的是,小理一定在某个洞穴停下,剩下的次数全部用来反复进入前面进入过的洞穴,且反复进入的洞穴一定是同一个,经验值最大的那一个。

那么只需要枚举所有情况就可以了。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;void solve(){int n,k;cin>>n>>k;vector<int> a(n+1),b(n+1);per(i,1,n)cin>>a[i];per(i,1,n)cin>>b[i];int f=0,res=0,ans=0;per(i,1,min(n,k)){int leave=k-i;//剩下的次数f+=a[i];//开洞穴累计的经验值res=max(res,b[i]);//前面开过的洞穴最大的那一个ans=max(ans,leave*res+f);//累计答案}cout<<ans<<endl;
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;cin>>t;while(t--)solve();return 0;
}

最小乘积

这道题显然官方数据集弄错了,导致一个人都没有通过。

可以进行的操作:

1、ai<0 可以将 ai 替换成 [ai,0] 其中的一个。

2、ai>=0 可以将 ai 替换成 [0,ai] 其中的一个。(显然 0 不能做修改)

要求进行最少的操作,使得数组的乘积最小。

只需要记录一下正数,负数,0,的数量即可。

如果存在 0,显然不管怎么操作最后乘积都是0,则不需要操作。

如果不存在 0,若 负数 有奇数个,那么最终乘积为负数,不需要修改。

                         若 负数 有偶数个,那么乘积一定正数,任意一个改成0。

无人AC。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;void solve(){int n;cin>>n;int pos=0,neg=0,zero=0;per(i,1,n){int tmp;cin>>tmp;if(tmp>0)pos++;else if(tmp<0)neg++;else if(tmp==0)zero++;}if(zero){cout<<0<<endl;}else{if(neg%2==0){cout<<1<<endl;cout<<1<<" "<<0<<endl;}else{cout<<0<<endl;}}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;cin>>t;while(t--)solve();return 0;
}

若此非正解请在评论区留言,否则建议大伙避雷该比赛,且本次全国赛算法科目只有120个左右参加,好少的人。

求和

一道哈人的模拟题。

思路比较简单,就是数字全部提取出来加在一起。

需要注意的是负号-,有可能作为分隔符使用。

如2-3,输出的是2+3=5

而2--3,输出的是2-3=-1

那么作为分割符的条件就很明显了,前面不能是数字。

由于输入没有告知多少行,且中间可能存在空行,所以我们使用getline来读入。

string s;
while(getline(cin,s))

本地调试的时候如果没有结果,请按下Ctrl+D,相当于输入文件末尾的EOF。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;void solve(){string s;while(getline(cin,s)){int res=0,ans=0;bool havNum=false;int pos=1;//是否是正数if(s.empty())continue;//什么都没有输入直接跳过per(i,0,s.length()-1){if(s[i]>='0' and s[i]<='9'){havNum=true;res*=10;res+=s[i]-'0';}else if(s[i]=='-' and s[i+1]>='0' and s[i+1]<='9' and !(s[i-1]>='0' and s[i-1]<='9')){pos=-1;}else{
//                debug(res*pos);ans+=res*pos;pos=true;res=0;}}if(res)ans+=res*pos;//考虑最后结尾是数字,没有累加上的情况。if(havNum)cout<<ans<<endl;//字符串中至少有一个整数才能输出。}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

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

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

相关文章

Spring:EnclosingClass工具类分辨

Spring&#xff1a;EnclosingClass工具类分辨 1 前言 通过Spring的工具分辨EnclosingClass类。 测试类如下&#xff1a; package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …

微信小程序(四十六)登入界面-进阶版

注释很详细&#xff0c;直接上代码 上一篇 此文使用了vant组件库&#xff0c;没有安装配置的可以参考此篇vant组件的安装与配置 新增内容&#xff1a; 1.手机号与验证码格式验证 2.验证码的网络申请和校验 wechat-http模块在好几篇以前已经讲了咋安装的&#xff0c;不记得的友…

最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)

经过两天的踩坑后&#xff0c;终于成功安装&#xff0c;并找到了最快捷的安装方式。接下来就由我来给大家介绍不踩坑安装大法&#xff01; 一、下载Mysql 首先前往Mysql官网下载 MySQL官方下载地址 第一步&#xff0c;选择安装包&#xff0c;这是最关键的一步&#xff0c;选错安…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&…

昇腾ACL应用开发之硬件编解码dvpp

1.前言 在我们进行实际的应用开发时&#xff0c;都会随着对一款产品或者AI芯片的了解加深&#xff0c;大家都会想到有什么可以加速预处理啊或者后处理的手段&#xff1f;常见的不同厂家对于应用开发的时候&#xff0c;都会提供一个硬件解码和硬件编码的能力&#xff0c;这也是抛…

sql注入之sqli-labs/less-3 单引号加括号闭合

输入单引号试探&#xff1a; id1 报错信息里面出现 ) 说明闭合符合里面还有个 ) 再次试探&#xff1a;id1 ) order by 3 -- 查看回显位置&#xff1a; id-1%20%27)%20union%20select%201,2,3%20-- 查看数据库&#xff1a; id-1%20%27)%20union%20select%201,2,database()%2…

Kerberos协议攻防之黄金票据控制整个公司电脑

&#x1f449;重点内容&#xff1a; 1、网络认证、本地认证、域认证的优略势 2、域认证之Kerberos协议的认证流程详解 3、TGT、Krbtgt、KDC、TGS搞懂这些绕口的概念 4、深入理解黄金票据攻击Golden Ticket Attack 5、实战&#xff01;通过黄金票据控制内网中所有的电脑

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为&#xff1a;https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式&#xff0c;都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip&#xff1a;192.16…

基于springboot+vue的工厂车间管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【Linux】输入系统应用

# 前置知识 (1)输入子系统分为三层&#xff0c;分别是事件处理层、核心层、设备驱动层&#xff1b; (2)鼠标移动、键盘按键按下等输入事件都需要通过设备驱动层→核心层→事件处理层→用户空间&#xff0c;层层上报&#xff0c;直到应用程序; 事件处理层 (1)事情处理层主要是负…

腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

大数据报告检测到风险等级太高是怎么回事呢?

随着金融风控越来越多元化&#xff0c;大数据作为新兴的技术被运用到贷前风控中去了&#xff0c;不少人也了解过自己的大数据&#xff0c;但是由于相关知识不足&#xff0c;看不懂报告&#xff0c;在常见的问题中&#xff0c;大数据检测到风险等级太高是怎么回事呢?小易大数据…

vsomeip源码剖析--00环境搭建

环境 Win11 WSL2 Ubuntu22.04安装依赖 sudo apt-get install cmake sudo apt-get install libboost-system1.71-dev libboost-thread1.71-dev libboost-log1.71-dev源码编译 获取源码 https://github.com/COVESA/vsomeip.git编译 cd vsomeip mkdir build cd build// 一般…

漫漫数学之旅035

文章目录 经典格言数学习题古今评注名人小传 - 黎勒•笛卡尔 经典格言 完美的数和完美的人是同样罕见的。——黎勒•笛卡尔&#xff08;Ren Descrates&#xff09; 完美的数和完美的人都是极为罕见的。这句话表达了一个哲学观点&#xff0c;即无论是在数学领域还是人类自身&am…

Spring框架相关问题

RabbitMQ相关问题 Spring框架相关问题 一、Spring容器中的Bean是线程安全的吗&#xff1f;二、如何保证Spring容器中的Bean是线程安全的呢&#xff1f;三、什么情况下会触发Spring事务回滚&#xff1f;四、如果事务方法抛出IOException&#xff0c;是否会触发Spring事务回滚&a…

Zookeeper学习2:原理、常用脚本、选举机制、监听器

文章目录 原理选举机制&#xff08;重点&#xff09;情况1&#xff1a;正常启动集群情况2&#xff1a;集群启动完&#xff0c;中途有机器挂了 监听器客户端向服务端写入数据客户端向服务端Leader节点写入客户端向服务端Follower节点写入 Paxos算法&#xff08;每个节点都可以提…

AMDGPU KFD Test 编译使用

ROCT-Thunk-Interface是一个用于在ROCm软件堆栈中提供设备无关性的层。它是ROCm的一部分,允许不同的硬件平台(如AMD GPU和Intel CPU)使用相同的API进行计算。 要安装ROCT-Thunk-Interface,首先需要创建一个新的目录,并进入该目录: mkdir rocm-build cd rocm-build然后,…

ruoyi 图片等文件资源读取

老是忘&#xff0c;记录一下 ResourcesConfig 文件下 /** 本地文件上传路径 */ registry.addResourceHandler(Constants.RESOURCE_PREFIX "/**").addResourceLocations("file:" RuoYiConfig.getProfile() "/"); /*** 资源映射路径 前缀*/ …

kafka消费者重平衡是什么?怎么避免?

消费者重平衡是指主题下的分区怎么分配给消费者的过程。下面这个图可以看出该过程&#xff1a;原来有2个消费者&#xff0c;3个分区&#xff0c;其中一个消费者肯定就的处理2个分区了。那么当新加入消费者时&#xff0c;则每个消费者就只处理一个分区了。处理这个分区过程的叫协…

详解Nacos注册中心的使用

文章目录 1、安装2、服务注册2.1、引入依赖2.2、配置nacos地址2.3、重启 3、服务分级存储模型3.1、给user-service配置集群3.2、同集群优先的负载均衡 4、权重配置5、环境隔离5.1、创建namespace5.2、配置namespace 6、Nacos与Eureka的区别7、代码免费分享 ​&#x1f343;作者…