(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)
题目一:验题人的生日【算法赛】
验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:
1.又是偶数,又是质数,那么只有2喽
AC_Code:C++
#include <iostream>
using namespace std;
int main()
{cout<<2;return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println(2);scan.close();}
}
题目二:蓝桥小课堂【算法赛】
蓝桥小课堂【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:
1.组成三角形的条件,任意两边大于第三边
2.注意不要用sqrt函数,因为输出的是面积的平方,最后直接输出即可,用sqrt函数时可能有的数据不是平方数,开放后会有精度损失,导致一直无法AC
AC_Code:C++
#include <iostream>
using namespace std;typedef long long LL;int main()
{LL a,b,c; cin>>a>>b>>c;if(a+b>c&&a+c>b&&b+c>a){ //任意两边大于第三边LL s=(a+b+c)/2;LL ans=s*(s-a)*(s-b)*(s-c);cout<<ans<<endl;}else cout<<-1<<endl;return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong();if(a+b>c&&a+c>b&&b+c>a){ //任意两边大于第三边long s=(a+b+c)/2;long ans=s*(s-a)*(s-b)*(s-c);System.out.println(ans);}else System.out.println(-1);}
}
题目三:压缩矩阵【算法赛】
压缩矩阵【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:找规律/数学
1.第一行和最后一行是两个数,其他行都是三个数
2.先算出行,算出行后让列也等于行,用x模3看余数是几,看是需要偏移,余数为1向右偏移一位,余数为2向左偏移一位,余数为0不需要偏移
3.算行的话就是找规律了,(x+4)/3就是行
AC_Code:C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>using namespace std;typedef long long LL;
typedef pair<int,int>PII;#define x first
#define y second
#define ls u<<1
#define rs u<<1|1
#define all(ss) ss.begin(),ss.end()int const mod1=998244353;
int const mod2=1e9+7;
int const N=2e5+7;
int const INF=0x3f3f3f3f;int T;
int m;
int a[N];
string s;void solve(){LL n;scanf("%lld%d", &n, &m);while (m -- ){LL x;scanf("%lld", &x);LL row=(x+4)/3; //计算行LL col=row;//看是否需要向左右偏移if(x%3==2) col--;else if(x%3==1) col++;printf("%lld %lld\n",row,col);}
} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T=1;//cin>>T;//scanf("%d",&T);init();while(T--){solve();}return 0;
}
AC_Code:java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);long n=sc.nextLong();int q=sc.nextInt();while(q-->0) {long x=sc.nextLong();long row=(x+4)/3; //算出行long col=row;//看是否要向左右偏移if(x%3==1) col++;else if(x%3==2) col--;System.out.println(row+" "+col);}}
}
题目四:恒纪元【算法赛】
恒纪元【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:
1.乱纪元的增长速度是非常快的,(2^40>1e12)所以乱纪元是非常少的,那么可以预处理出所有的乱纪元
2.对于每一个询问s,暴力找到大于s的第一个恒纪元t,再暴力(二分也可以)找到第一个大于t的乱纪元,用第一个大于t的乱纪元-t就是恒纪元可以持续的天数了
3.这个的预处理其实是一个谜(预处理不好很容易只能过25%的测试样例),预处理出小于1e13次方的乱纪元就可以过
AC_Code:C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>using namespace std;typedef long long LL;
typedef pair<int,int>PII;#define x first
#define y second
#define ls u<<1
#define rs u<<1|1
#define all(ss) ss.begin(),ss.end()int const mod1=998244353;
int const mod2=1e9+7;
int const N=2e5+7;
LL const INF=1e13;int T;
int n,q;
int x,y,z;
set<LL>vis; //存储乱纪元LL qpow(int a,int b){LL res=1;for(int i=0;i<b;i++){res=res*a;if(res>INF) return -1; //大于正无穷了}return res;
}void solve(){scanf("%d%d%d",&x,&y,&z);for(int i=0;i<=40;i++){LL a=qpow(x,i);if(a==-1) break;//大于正无穷了for(int j=0;j<=40;j++){LL b=qpow(y,j);if(b==-1) break;//大于正无穷了for(int k=0;k<=40;k++){LL c=qpow(z,k);if(c==-1) break;//大于正无穷了LL s=a+b+c;if(s>INF) break; //三者相加大于正无穷vis.insert(s);}}}scanf("%d",&q);while(q--){LL s; scanf("%lld",&s); LL t=s+1;while(vis.count(t)) t++; //找到第一个恒纪元//二分找到第一个大于t的乱纪元,相减求恒纪元持续了多少天printf("%lld %lld\n",t,*vis.upper_bound(t)-t);}
} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T=1;//cin>>T;//scanf("%d",&T);init();while(T--){solve();}return 0;
}
AC_Code:java
import com.sun.source.tree.Tree;import java.util.*;public class Main {static final long INF=(long)1e13;static long qpow(int a,int b){long res=1;for(int i=0;i<b;i++) {res=res*a;if(res>INF) return -1;}return res;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);TreeSet<Long> vis=new TreeSet<>();List<Long> list=new ArrayList<>();int x=sc.nextInt(),y=sc.nextInt(),z=sc.nextInt();//预处理乱纪元for(int i=0;i<=40;i++){long a=qpow(x,i);if(a==-1) break; //大于正无穷for(int j=0;j<=40;j++){long b=qpow(y,j);if(b==-1) break; //大于正无穷for (int k = 0; k < 40; k++) {long c=qpow(z,k);if(c==-1) break; //大于正无穷long s=a+b+c;if(s>INF) break; //三者相加大于正无穷if(!vis.contains(s)){list.add(s);vis.add(s);} }}}Collections.sort(list); //集合排序int q=sc.nextInt();while(q-->0){long s=sc.nextLong();long t=s+1;//找到第一个恒纪元while(vis.contains(t)) t++;//找到大于第一个横纪元的乱纪元int idx=-1;for (int i = 0; i < list.size(); i++) {if(list.get(i)>t){idx=i;break;}}//第一个大于t的乱纪元-减去恒纪元System.out.println(t+" "+(list.get(idx)-t));// System.out.println(t+" "+(vis.ceiling(t+1)-t)); //二分} //ceiling相当于lower_bound}
}
题目五:充能计划【算法赛】
充能计划【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:
简述题意:n个引擎,m种宝石,q个询问,每个询问选出一种宝石p,放到第k个引擎上,此时区间[k,min(n,k+s[p]-1)]都会放入p这个宝石,s数组为每个宝石的充能范围,最后问n种引擎宝石的数量
1.对n个引擎开n个set,对每个询问的合法区间都加入宝石p,最后对每个引擎输出set的大小,时间复杂度o(n^2),会tle的,怎么优化呢?
2.可以对每种宝石分组,对每一个询问记录区间,最后对每种宝石合并区间(注意合并区间前要对左端点排序),合并区间后用差分记录左右端点位置
3.最后累加差分,计算答案
AC_Code:C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>using namespace std;typedef long long LL;
typedef pair<int,int>PII;#define x first
#define y second
#define ls u<<1
#define rs u<<1|1
#define all(ss) ss.begin(),ss.end()int const mod1=998244353;
int const mod2=1e9+7;
int const N=2e5+7;
int const INF=0x3f3f3f3f;int T;
int n,m,q;
int s[N];
vector<PII>line[N]; //line[i]:存储宝石i的所有区间
int diff[N];void solve(){scanf("%d%d%d", &n, &m,&q);for(int i=1;i<=m;i++) scanf("%d",s+i);while(q--){int p,k; scanf("%d%d",&p,&k);line[p].push_back({k,min(n,k+s[p]-1)});}for(int i=1;i<=m;i++){if(line[i].empty()) continue;sort(line[i].begin(),line[i].end()); //按左端点排序int l=line[i][0].x,r=line[i][0].y;//区间合并,差分for(PII p:line[i]){if(r>=p.x) r=max(r,p.y);else{diff[l]++;diff[r+1]--;l=p.x;r=p.y;}}diff[l]++; diff[r+1]--;}int ans=0; //累加查分计算答案for(int i=1;i<=n;i++){ ans+=diff[i];printf("%d ",ans);}} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T=1;//cin>>T;//scanf("%d",&T);init();while(T--){solve();}return 0;
}
AC_Code:java
import com.sun.source.tree.Tree;import java.util.*;public class Main {static int N=(int)1e5+7;static int[] s=new int[N];static List<Line>[] line=new ArrayList[N];static int[] diff=new int[N];public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt(),m=sc.nextInt(),q=sc.nextInt();for(int i=1;i<=m;i++) {s[i]=sc.nextInt();line[i]=new ArrayList<Line>();}while(q-->0){int p=sc.nextInt(),k=sc.nextInt();line[p].add(new Line(k,Math.min(n,k+s[p]-1))); //按宝石种类分组}for(int i=1;i<=m;i++) {if (line[i].isEmpty()) continue;Collections.sort(line[i]); //排序//区间合并,差分操作int l = line[i].get(0).l, r = line[i].get(0).r;for (Line p : line[i]) {if (r >= p.l) r = Math.max(r, p.r);else {diff[l]++;diff[r + 1]--;l = p.l;r = p.r;}}diff[l]++;diff[r + 1]--;}int ans=0; //计算答案for(int i=1;i<=n;i++){ans+=diff[i];System.out.print(ans+" ");}}
}class Line implements Comparable<Line>{int l,r;public Line(int l, int r) {this.l = l;this.r = r;}public int compareTo(Line o) {return l-o.l;}
}
题目六:大风起兮【算法赛】
大风起兮【算法赛】 - 蓝桥云课 (lanqiao.cn)
思路:
1.动态求平均数,可以用两个multiset,一个存放一半较小的数,一个存放一半较大的数
2.对于每一个询问,先删除一个数,再计算中位数
AC_Code:C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>using namespace std;typedef long long LL;
typedef pair<int,int>PII;#define x first
#define y second
#define ls u<<1
#define rs u<<1|1
#define all(ss) ss.begin(),ss.end()int const mod1=998244353;
int const mod2=1e9+7;
int const N=2e5+7;
int const INF=0x3f3f3f3f;int T;
int n,m;
int a[N];
string s;void solve(){scanf("%d", &n);vector<int>b;for(int i=1;i<=n;i++) {scanf("%d",a+i);b.push_back(a[i]);}sort(b.begin(),b.end());multiset<int>mx,mi; //n为奇数,mi多放一个数for(int i=0;i<(n+1)/2;i++) mi.insert(b[i]); for(int i=(n+1)/2;i<n;i++) mx.insert(b[i]);scanf("%d", &m);while(m--){int x; scanf("%d",&x);if(mi.count(a[x])){ //删除小的数那一堆mi.erase(mi.find(a[x]));if(mx.size()>mi.size()){int temp=*mx.begin();mi.insert(temp);mx.erase(mx.find(temp));}}else{ //删除大的数那一堆mx.erase(mx.find(a[x]));if(mi.size()-mx.size()>1){int temp=*mi.rbegin();mx.insert(temp);mi.erase(mi.find(temp));}}//输出答案if(mi.size()>mx.size()) printf("%.1lf ",*mi.rbegin()*1.0);else printf("%.1lf ",(*mi.rbegin()+*mx.begin())/2.0);}} void init(){ }int main()
{//std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);T=1;//cin>>T;//scanf("%d",&T);init();while(T--){solve();}return 0;
}
AC_Code:java
题目七:时空追捕【算法赛】
不会写,占时更新,
相关文章:

(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)
题目一:验题人的生日【算法赛】 验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路: 1.又是偶数,又是质数,那么只有2喽 AC_Code:C #include <iostream> using namespace std; int main() {cout<<2;return 0; …...

也可Adobe Animate
Animate CC 由原Adobe Flash Professional CC 更名得来,2015年12月2日:Adobe 宣布Flash Professional更名为Animate CC,在支持Flash SWF文件的基础上,加入了对HTML5的支持。并在2016年1月份发布新版本的时候,正式更名为…...

【面试HOT200】回溯篇
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于【CodeTopHot300】进行的,每个知识点的修正和深入主要参…...

JVM——内存溢出和内存泄漏
目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比
《凤凰项目》读书笔记
文章目录 一、书名和作者二、书籍概览2.1 主要论点和结构2.2 目标读者和应用场景 三、核心观点与主题3.1 DevOps的核心原则与文化变革3.2 持续交付与自动化3.3 变更管理与风险控制3.4 关键绩效指标与持续改进 四、亮点与启发4.1 最有影响的观点4.2 对个人专业发展的启示 五、批…...

熬夜会秃头——beta冲刺Day4
这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…...

HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效
实例:浪漫的心形文字动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conte…...
数据结构-基数排序
基数排序 基本思想 基数排序其实就是依靠多位关键字进行排序,现在我们有一个数据为101,那么“101”就是一个三位 关键字,分别为:“百位->1”、“十位->0”、“个位->1”。 此时我们就可以按照三位关键字进行排序&…...

基于ASP.NET MVC技术的图书管理系统的设计与实现
基于ASP.NET MVC技术的图书管理系统的设计与实现 摘要:图书管理系统是一套高新科学技术和图书知识信息以及传统历史文化完美结合的体现。它改变了传统图书收藏的静态书本式图书服务特征,实现了多媒体存取、远程网络传输、智能化检索、跨库无缝链接、创造…...

C++17中的结构化绑定
C17中的结构化绑定(structured binding):将指定名称绑定到初始化程序的子对象或元素。简而言之,它们使我们能够从元组或结构中声明多个变量。与引用一样,结构化绑定是现有对象的别名;与引用不同,结构化绑定不必是引用类型(referen…...

Mover Creator 用户界面
1 “开始”对话框 首次打开 Mover Creator 时,出现的第一个页面是“开始”对话框,如下所示。从这里开始,用户可以选择开始设计飞机、武器或发动机。在上述每种情况下,用户都可以创建新模型或编辑现有模型。 1.1 新建模型 如果用…...

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践
📣读完这篇文章里你能收获到 如何创建用户账号和密码文件,并生成加密密码配置Nginx的认证模块,实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…...
MongoDB导入导出命令
(1)mongoexport命令 例如: mongoexport --db testdb --collection person --out person.json mongoexport --db testdb --collection person --fields name,age --out person.json mongoexport --db testdb --collection person --query {&qu…...

软件工程期末复习(1)
学习资料 软件工程知识点总结_嘤桃子的博客-CSDN博客 软件工程学习笔记_软件工程导论第六版张海藩pdf-CSDN博客 【软件工程】软件工程期末试卷习题课讲解!!_哔哩哔哩_bilibili 【拯救者】软件工程速成(期末考研复试软考)均适用. 支持4K_哔哩哔哩_bil…...

nextjs入门
创建项目 npx create-next-app 项目名 体验文件路由 nextjs提供了文件路由的功能, 根据文件系统的目录结构, 可以识别为对应的页面路由 创建页面 首先, 在src下创建pages目录, 然后创建一个about文件(对应about页面)和main/index.js文件(对应首页) pages/main/index con…...

【C语言】字符串函数strlen #strcpy #strcmp #strcat #strstr及其模拟实现
在C语言中,有一种特殊的数据类型,即字符串类型。C 并没有专门定义一个字符串类型,这对我们使用字符串造成了一定的麻烦。但是,C标准库<string.h> 中定义了各种字符串函数,这对于我们来说是一件值得庆幸的事情。…...

递归实现组合型枚举
递归实现组合型枚举 #include<iostream> #include<vector>int n, m; std::vector<int>res; bool st[30];void Print() {for(int i0;i<res.size();i){printf("%d ",res[i]);}puts(""); }void dfs(int num) {if (res.size() m){Print(…...
SCAU:1065 数组中的指针
1065 数组中的指针 时间限制:1000MS 代码长度限制:10KB 提交次数:3436 通过次数:1692 题型: 编程题 语言: G;GCC Description 设有如下数组定义: int a[3][4]{{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设数组a的首地址为2000&…...

找不到msvcp110.dll如何修复?分享5个亲测有效的修复方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp110.dll丢失”。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。那么,msvcp110.dll到底是什么呢?它又有什么作用࿱…...
LeetCode刷题笔记第80题:删除有序数组中的重复项 II
LeetCode刷题笔记第80题:删除有序数组中的重复项 II 题目: 删除升序数组中超过两次的元素后的数组长度 想法: 使用快慢指针的方法完成,使用快指针遍历整个数组,使用慢指针完成相同元素最多保留两个。在快指针遍历到…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...