第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解
1.小苯的木棍切割

【解析】首先我们先对数列排序,找到其中最小的数,那么我们就保证了对于任意一个第i+1个的值都会大于第i个的值那么第i+2个的值也比第i个大,那么我们第i+1次切木棍的时候一定会当第i个的值就变为了0的,第i+1减去的应该是第i个的值与第i-1个的差值,对于i+1到n同样如此,那么我们的递推关系就出来了,每次都切去的值都是(第i个跟第i-1个的差值)*(n-i+1)那么我们就可以用差分来写。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int t;
int a[N];
int b[N];
int main(){
cin>>t;
for(int i=0;i<t;i++){int n;cin>>n;memset(b,0,sizeof(b));memset(a,0,sizeof(a));for(int i=1;i<=n;i++){ cin>>a[i];}sort(a+1,a+n+1);for(int i=1;i<=n;i++){b[i]=a[i]-a[i-1];} long long max=0;//不开long long 见祖宗!!!for(int i=1;i<=n;i++){if(max<b[i]*(n-i+1)){max=b[i]*(n-i+1); } }cout<<max<<endl;
}
}
2.大苯营

【解析】可以全部转化为等腰三角形来求解,我们经过观察得知当当x 和 y 的二进制没有任何交集时(即x&y=0 时),x∣y=x⊕y。位运算来解。
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;while(n--){int x;cin>>x;int y=0;
//全部转化为2的30次方的操作for(int i = 30; i >= 0; i--) {if(x >> i & 1) {} else {y |= (1LL << i);}}if(y==0)cout<<-1<<endl;else cout<<y<<endl;}
}
3.小苯的排列数

【解析全排列题但是如果仅仅只是用dfs来进行全排列的话会超时。看题目范围,用dfs全枚举一边的时间是1!+2!+...+9!大概是4*10^5的时间复杂度。那么我们用dfs进行预处理,接着用二分以logn的复杂度来进行查找枚举。
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
bool st[15];
int h=0;
int kk;
int l,r;
//dfs进行预处理
void dfs(int x,int y,int kk){
if(x==y){v.push_back(kk);return ;
}
for(int i=1;i<=y;i++){if(!st[i]){st[i]=true;dfs(x+1,y,kk*10+i);st[i]=false; }
}
}
//二分查找
void slove(){int lk=-1,rk=v.size();while(lk+1<rk){int mid=(lk+rk)/2;if(v[mid]<l)lk=mid;else rk=mid; }if(v[lk]>=l&&v[lk]<=r)cout<<v[lk]<<endl;else if(v[rk]>=l&&v[rk]<=r)cout<<v[rk]<<endl;else cout<<-1<<endl;
}
int main(){int t;cin>>t;for(int i=1;i<=9;i++)dfs(0,i,0);while(t--){cin>>l>>r;slove();}
}
4.小苯的字符串染色

【解析】
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve() {int n, k;cin >> n >> k;getchar();string str;getline(cin, str);
//取 k 和 n - k 中的较小值,因为找出包含 k 个 0 的子串和包含 n - k 个 1 的子串是等价的。k = min(k, n - k);int ret = 0;for(int left = 0, right = 0, cnt = 0; right < n; right++) {if(str[right] == '1') cnt++;if(cnt < k) continue;while(cnt > k && left <= right) {if(str[left] == '1') cnt--;left++;}if(cnt == k) ret = max(ret, right - left + 1);} for(int left = 0, right = 0, cnt = 0; right < n; right++) {if(str[right] == '0') cnt++;if(cnt < k) continue;while(cnt > k && left <= right) {if(str[left] == '0') cnt--;left++;}if(cnt == k) ret = max(ret, right - left + 1);} cout << ret << "\n";
}
signed main() {int t ;cin >> t;while(t--) {solve();}
}
5.小苯的物理小球

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int>PII;#define fi first
#define se second
#define all(ss) ss.begin(),ss.end()
#define pb push_back
#define vi vector<int>
#define vii vector<vector<int>>
#define vl vector<LL>
#define vll vector<vector<LL>>
#define i128 __int128int const B=507;
double const eps=1e-6;
int const mod=998244353;
int const N=2e5+7,M=N*50;
int const INF=0x3f3f3f3f;
LL const INFF=0x3f3f3f3f3f3f3f3f;int n,m;
int x,y,z;
int ls[M],rs[M],tot,root;
LL sum[M],tag[M];void pushup(int u){sum[u]=sum[ls[u]]+sum[rs[u]];
}
void pushdown(int u,int l,int r){if(tag[u]==-1) return;if(ls[u]==0) ls[u]=++tot;if(rs[u]==0) rs[u]=++tot;int mid=(l+r)>>1;sum[ls[u]]=tag[u]*(mid-l+1);sum[rs[u]]=tag[u]*(r-mid);tag[ls[u]]=tag[u];tag[rs[u]]=tag[u];tag[u]=-1;
}
void modify(int &u,int l,int r,int x,int y,LL k){if(u==0) u=++tot;if(x<=l&&r<=y){sum[u]=k*(r-l+1);tag[u]=k; return;}pushdown(u,l,r);int mid=(l+r)>>1;if(mid>=x) modify(ls[u],l,mid,x,y,k);if(y>mid) modify(rs[u],mid+1,r,x,y,k);pushup(u);
}int query(int &u,int l,int r,int p){if(u==0) u=++tot;if(l==r){if(sum[u]==-1) sum[u]=r; //没有初始化,则帮他初始化return sum[u];}pushdown(u,l,r);int mid=(l+r)>>1;if(mid>=p) return query(ls[u],l,mid,p);return query(rs[u],mid+1,r,p);
}LL qpow(LL a,LL b=mod-2,int p=mod){ //快速幂LL res=1%p;a%=p; //注意这个幂数b,不可以取模while(b){if(b&1) res=res*a%p;a=a*a%p; b/=2;}return res;
}
/*
对线段高度从低到高考虑,每次计算当前线段的期望值
从小到大枚举高度,看当前线段的两端点会落在那里,
如果会落在更低的线段,直接转移过来,并且除2
如果会落在地方,就是用横坐标除2然后就是要维护x轴的每一个端点,直接开数组维护,空间时间都会爆
所以,我用的是动态开点线段树,维护值域
*/void solve(){scanf("%d%d",&n,&m);int mx=0;vector<array<int,3>>a;for(int i=0;i<n;i++){scanf("%d%d%d",&x,&y,&z);a.pb({z,x,y});mx=max(mx,x);mx=max(mx,y);}vector<array<int,2>>q;for(int i=0;i<m;i++){scanf("%d%d",&x,&y);q.pb({y,x});mx=max(mx,x);}sort(all(a));sort(all(q));LL ans=0;LL inv2=qpow(2);int j=0;for(int i=0;i<n;i++){//q[j]的高度更小while(j<m&&q[j][0]<a[i][0]){ //a数组无法影响d数组了int id=q[j][1];ans=(ans+query(root,1,mx,id))%mod;j++;}int x=a[i][1],y=a[i][2]; LL v1=query(root,1,mx,x);LL v2=query(root,1,mx,y);LL t=(v1+v2)*inv2%mod;if(x+1<=y-1&&y-1<=mx) modify(root,1,mx,x+1,y-1,t);}while(j<m){ //累加没有计算的int id=q[j][1];ans=(ans+query(root,1,mx,id))%mod;j++;}cout<<ans<<"\n";for(int i=0;i<=tot;i++) ls[i]=rs[i]=0,sum[i]=tag[i]=-1;root=tot=0;
}void init(){memset(tag,-1,sizeof tag);memset(sum,-1,sizeof sum);
}int main()
{init();int T;scanf("%d",&T);for(int i=1;i<=T;i++){solve();}return 0;
}
6.小苯的地下城寻宝

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10,M=N*2,mod=998244353;
#define int long long
const long long inf=1e18;
const long long INF=1e18;
typedef pair<int,int> PII;
typedef long long LL;
using node=tuple<int,int,int>;
int n,m,k;
vector<int> coef(N,1);
vector<int> d[N];
void init(){coef[1]=0;for(int i=1;i<=100000;i++){for(int j=i;j<=100000;j+=i){d[j].push_back(i);if(j>i)coef[j]-=coef[i];}}
}
vector<int> g[N];
vector<int> dep[N];
int f[N],a[N];
int mx;
void dfs(int u,int fa,int depth){dep[depth].push_back(u);mx=max(mx,depth);for(auto v:g[u]){if(v!=fa){dfs(v,u,depth+1);}}
}
void solve()
{cin>>n;for(int i=1;i<=n;i++) g[i].clear(),dep[i].clear(),f[i]=0;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){int x;cin>>x;if(x>0){g[i].push_back(x);g[x].push_back(i);}}mx=0;dfs(1,0,1);unordered_map<int,int>mp;f[1]=1;for(auto x:d[a[1]])mp[x]+=f[1];int res=1;for(int i=2;i<=mx;i++){for(auto v:dep[i]){for(auto x:d[a[v]]){f[v]=(f[v]+mp[x]*coef[x]%mod)%mod;f[v]=(f[v]%mod+mod)%mod;}res=(res+f[v])%mod;}for(auto v:dep[i]){for(auto x:d[a[v]]){mp[x]=(mp[x]+f[v])%mod;}}}cout<<res<<"\n";
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;init();// freopen("in.txt","r",stdin); //输入重定向,输入数据将从D盘根目录下的in.txt文件中读取
// freopen("out.txt","w",stdout); //输出重定向,输出数据将保存在D盘根目录下的out.txt文件中 cin>>t;while(t--) solve();
}
相关文章:
第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解
1.小苯的木棍切割 【解析】首先我们先对数列排序,找到其中最小的数,那么我们就保证了对于任意一个第i1个的值都会大于第i个的值那么第i2个的值也比第i个大,那么我们第i1次切木棍的时候一定会当第i个的值就变为了0的,第i1减去的应该…...
Netty前置基础知识之BIO、NIO以及AIO理论详细解析和实战案例
前言 Netty是什么? Netty 是一个基于 Java 的 高性能异步事件驱动网络应用框架,主要用于快速开发可维护的协议服务器和客户端。它简化了网络编程的复杂性,特别适合构建需要处理海量并发连接、低延迟和高吞吐量的分布式系统。 1)Netty 是…...
开源身份和访问管理(IAM)解决方案:Keycloak
一、Keycloak介绍 1、什么是 Keycloak? Keycloak 是一个开源的身份和访问管理(Identity and Access Management - IAM)解决方案。它旨在为现代应用程序和服务提供安全保障,简化身份验证和授权过程。Keycloak 提供了集中式的用户…...
深入理解 TCP 协议 | 流量、拥塞及错误控制机制
注:本文为 “TCP 协议” 相关文章合辑。 原文为繁体,注意术语描述差异。 略作重排,如有内容异常,请看原文。 作者在不同的文章中互相引用其不同文章,一并汇总于此。 可从本文右侧目录直达本文主题相关的部分ÿ…...
VSCode远程图形化GDB
VSCode远程图形化GDB 摘要一、安装VSCode1、使用.exe安装包安装VSCode2、VSCode 插件安装3、VSCode建立远程连接 二、core dump找bug1、开启core文件2、永久生效的方法3、编写测试程序4、运行结果5、查看core段错误位置6、在程序中开启core dump并二者core文件大小 三、gdbserv…...
软件工程师中级考试-上午知识点总结(上)
我总结的这些都是每年的考点,必须要记下来的。 1. 计算机系统基础 1.1 码 符号位0表示正数,符号位1表示负数。补码:简化运算部件的设计,最适合进行数字加减运算。移码:与前几种不同,1表示,0表…...
Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
这是一个使用Python和CoppeliaSim(V-REP)控制ASTI人型机器人进行舞蹈动作的演示项目。 项目描述 本项目展示了如何使用Python通过ZeroMQ远程API与CoppeliaSim仿真环境进行交互,控制ASTI人型机器人执行预定义的舞蹈动作序列。项目包含完整的机…...
基于FreeRTOS和STM32的微波炉
一、项目简介 使用STM32F103C8T6、舵机、继电器、加热片、蜂鸣器、两个按键、LCD及DHT11传感器等硬件。进一步,结合FreeRTOS和状态机等软件实现了一个微波炉系统;实现的功能包含:人机交互、时间及功率设置、异常情况处理及固件升级等。 二、…...
维度建模工具箱 提纲与总结
这里写自定义目录标题 基本概念事实表和维度表BI(Business Intelligence) 产品 事实表事实表的粒度事实表的种类 维度表建模技术基本原则避免用自然键作为维度表的主键,而要使用类似自增的整数键避免过度规范化避免变成形同事实表的维度表 SCD(Slowly Changed Dimen…...
【沉浸式求职学习day21】【常用类分享,完结!】
沉浸式求职学习 String类(完结) 和 equals的区别 StringBuffer日期类DateCalendar File类 String类(完结) 上次讲了一些创建String类实例的方法。 今天要分享的第一个点是常考的关于String的面试题 和 equals的区别 首先是&…...
国防科大清华城市空间无人机导航推理!GeoNav:赋予多模态大模型地理空间推理能力,实现语言指令导向的空中目标导航
作者: Haotian Xu 1 ^{1} 1, Yue Hu 1 ^{1} 1, Chen Gao 2 ^{2} 2, Zhengqiu Zhu 1 ^{1} 1, Yong Zhao 1 ^{1} 1, Yong Li 2 ^{2} 2, Quanjun Yin 1 ^{1} 1单位: 1 ^{1} 1国防科技大学系统工程学院, 2 ^{2} 2清华大学论文标题:Geo…...
uniapp打ios包
uniapp在windows电脑下申请证书并打包上架 前言 该开发笔记记录了在window系统下,在苹果开发者网站生成不同证书,进行uniapp打包调试和上线发布,对window用户友好 注:苹果打包涉及到两种证书:开发证书 和 分发证书 …...
Redis 的指令执行方式:Pipeline、事务与 Lua 脚本的对比
Pipeline 客户端将多条命令打包发送,服务器顺序执行并一次性返回所有结果。可以减少网络往返延迟(RTT)以提升吞吐量。 需要注意的是,Pipeline 中的命令按顺序执行,但中间可能被其他客户端的命令打断。 典型场景&…...
(14)VTK C++开发示例 --- 将点投影到平面上
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 计算一个点在一个平面上的投影。 vtkPlane 是 VTK(Visualization Toolkit)库中的一个类&…...
快速搭建 Cpolar 内网穿透(Mac 系统)
1、Cpolar快速入门教程(官方) 链接地址:Cpolar 快速入门 2、官方教程详解 本地安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这个是从 git 上拉取的&#x…...
【Flink SQL实战】 UTC 时区格式的 ISO 时间转东八区时间
文章目录 一、原始数据格式二、解决方案三、其他要求 在实际开发中,我们常常会遇到此类情况:数据源里的时间格式是类似 2025-04-21T09:23:16.025Z 这种带 TimeZone 标识的 ISO 8601 格式,而我们需要在 Flink SQL 中将其转换成北京时间显示。 …...
动态监控进程
1.介绍: top和ps命令很相似,它们都是用来显示正在执行的进程,top和ps最大的不同之处,在于top在执行中可以更新正在执行的进程. 2.基本语法: top [选项] 选项说明 ⭐️僵死进程:内存没有释放,但是进程已经停止工作了,需要及时清理 交互操作说明 应用案…...
HADOOP 3.4.1安装和搭建(尚硅谷版~)
目录 1.配置模版虚拟机 2.克隆虚拟机 3.在hadoop102安装JDK 4.完全分布式运行模式 1.配置模版虚拟机 1.安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存2G、硬盘20G(有需求的可以配置4G内存,50G硬盘) 2.hado…...
第 4 篇:平稳性 - 时间序列分析的基石
第 4 篇:平稳性 - 时间序列分析的基石 在上一篇中,我们学习了如何将时间序列分解为趋势、季节性和残差。我们看到,很多真实世界的时间序列(比如 CO2 浓度)都包含明显的趋势(长期向上或向下)和/…...
DeepSeek赋能Nuclei:打造网络安全检测的“超级助手”
引言 各位少侠,周末快乐,幸会幸会! 今天唠一个超酷的技术组合——用AI大模型给Nuclei开挂,提升漏洞检测能力! 想象一下,当出现新漏洞时,少侠们经常需要根据Nuclei模板,手动扒漏洞文章…...
分享一个python启动文件脚本(django示例)
今天给大家分享一个python启动文件脚本 在日常开发中,我们常常需要运行多条命令来完成“静态收集”“数据库迁移”“启动服务”……如果把这些命令整合到一个脚本里就好了 一、整体流程概览 #mermaid-svg-wA6UnfATaUOfJoPn {font-family:"trebuchet ms"…...
从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!
我正在参加Trae「超级体验官」创意实践征文, 本文所使用的 Trae 免费下载链接: www.trae.ai/?utm_source… 前言 大家好,我是小Q,字节跳动近期推出了一款 AI IDE—— Trae,由国人团队开发,并且限时免费体…...
3200温控板电路解析
提示:文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问: 本文目标: 一、背景 最近重温3200温控板电路设计和芯片选型 3200代码仓 二、 2.1 按照顺序整理,主要是依靠自己想到的来整理 1、传感器是pt1000&…...
opencv图片颜色识别,颜色的替换
图片颜色识别 1. RGB颜色空间2. 颜色加法2.1使用numpy对图像进行加法2.2使用opencv加法(cv2.add) 3 颜色加权加法(cv2.addWeighted())4. HSV颜色空间5. 制作掩膜4. 与运算(cv2.bitwise_and)5.颜色的替换7 R…...
B实验-12
需要注意版本、页面源代码 两个文件一个目录:phpinfo robots phpmyadmin 实验12 靶机1 一个key在phpmyadmin,一个key在回收站 用两个扫描目录的工具扫,nmap给python版 情况1:弱口令 root root root 123456 …...
Python多技术融合在生态参量估算中的创新应用—以蒸散发与植被GPP估算为例
在全球气候变化背景下,精确估算陆地生态系统水碳通量成为生态研究的关键命题。本研究创新性地整合Python编程、遥感数据处理、机器学习算法及生态过程模型,构建了一套高效可靠的蒸散发(ET)与植被总初级生产力(GPP&…...
文件有几十个T,需要做rag,用ragFlow能否快速落地呢?
一、RAGFlow的优势 1、RAGFlow处理大规模数据性能: (1)、RAGFlow支持分布式索引构建,采用分片技术,能够处理TB级数据。 (2)、它结合向量搜索和关键词搜索,提高检索效率。 …...
【网工第6版】第5章 网络互联②
目录 ■ IPV6 ▲ IPV6报文格式 ◎ IPV6扩展报头(RFC2460) ◎ IPv6相关协议 ▲ IPV6地址分类 ◎ IPv6地址基础 ◎ IPv6地址举例 ◎ IPv6地址分类 ◎ 特殊地址对比IPv4 vs IPv6 ▲ 过渡技术 本章重要程度:☆☆☆☆☆ ■ IPV6 与IPv4…...
为什么Makefile中的clean需要.PHONY
原因一:避免Makefile检查时间戳 前置知识:makefile在依赖文件没有改变时不会执行编译命令 #第一次执行,OK [rootVM-16-14-centos ~]# make g -E main.cc -o main.i g -S main.i -o main.s g -c main.s -o main.o g main.o -o main#第二…...
Vue组件库开发实战:从0到1构建可复用的微前端模块
🔥 随着前端项目越来越复杂,如何开发一个可以随处使用的组件库变得尤为重要。本文将带你从0开始,实现一个完全独立的Vue组件库,包含样式隔离、主题定制等核心功能。 前言 在日常开发中,我们经常需要在不同项目间复用组…...
