2026年嘉应学院寒假算法冬令营结训赛

news/2026/1/16 22:46:30/文章来源:https://www.cnblogs.com/accuber/p/19494272

2026年嘉应学院寒假算法冬令营结训赛

A B2029 大象喝水 - 洛谷

数学题,对于圆周率 π ,可以×100之后再除回去,避免小数带来的精度误差。

void solve(){int h,r;cin>>h>>r;int sum=h*314*r*r;//cout<<sum<<endl;int res=20000*100;if(res%sum)cout<<res/sum+1<<endl;else cout<<res/sum<<endl; 
}

B P1152 欢乐的跳 - 洛谷

模拟题,把两相邻数之差用st数组标记即可。注意相差过大可能会造成越界问题,需要加个判断。

void solve(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=2;i<=n;i++){int tmp=abs(a[i]-a[i-1]);if(tmp<n)st[tmp]=1;}int flag=1;for(int i=1;i<=n-1;i++){if(st[i]==0){cout<<"Not jolly"<<endl;return;}}cout<<"Jolly"<<endl;
}

C P1923 【深基9.例4】求第 k 小的数 - 洛谷

题目标签所提到了分治法, 可以理解为是我们ACWing快速排序的递归分治的策略,时间复杂度O(n logn)

或者洛谷题解中的快速选择算法:
递归查找,先选择一个基数(可以选择最右侧元素/中位数/随机选择),然后反复进行分区,将数组分为小于基准和大于基准两部分。接下来进入递归处理部分:根据 k 和基数的位置关系,决定选左半边还是右半边。如果 k 就是基数呢?直接输出就好了。 O(n)

如果使用sort,因为数据量过大(超过\(10^5\)), 必须加上加速(关闭流同步)

void solve(){cin>>n>>k;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);cout<<a[k]<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int _=1;//cin>>_;while(_--)solve();return 0;
} 

D P1216 [IOI 1994 / USACO1.5] 数字三角形 Number Triangles - 洛谷

非常经典的一道 线性DP 的题目。
需要从倒数第二层开始,选择它下面两个位置的值。这个值记作从最后一层开始,路径上的最大总和。具体方法可以参考AcWing 898. 数字三角形 - AcWing

void solve(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)cin>>g[i][j];}for(int i=n-1;i>=1;i--){for(int j=1;j<=i;j++)g[i][j]+=max(g[i+1][j],g[i+1][j+1]);}cout<<g[1][1]<<endl;
}

E P3799 小 Y 拼木棒 - 洛谷

4根木棒组成一个正三角形,则必有 2根长度相等。
且另外2根长度之和,等于前2根相等的木棒 的长度。
意识到这个就显而易见了(虽然我赛时没想出来T-T)

各木棍长度 \(a_i\)≤5000,我们可以预处理每个长度的选择\(C^{2}_{(cnt_{a_i})}\) ,
再从1到\(a_i\)/2 枚举另外两根长度, 时间复杂度 O(\(n^2\)) 。

void solve(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i],cnt[a[i]]++;int res=0;for(int i=1;i<=5000;i++){int tmp=cnt[i]*(cnt[i]-1)/2%mod;if(tmp==0)continue;//取模要充分,避免超出范围//如果有负数出现,要(sum%mod+mod)%modfor(int j=1;j<i/2;j++){res+=cnt[j]*cnt[i-j]%mod*tmp%mod;res%=mod;}//如果另外两根相等:if(i%2==0){res+=cnt[i/2]*(cnt[i/2]-1)/2%mod*tmp%mod;res%=mod;}else {//别漏了这个,是上面j<i/2的遗漏问题T-Tres+=cnt[i/2]*cnt[i/2+1]%mod*tmp%mod;res%=mod;}}cout<<res<<endl;
}

F P1928 外星密码 - 洛谷

这题是一个比较难的字符串模拟, 赛时没有想到怎么找最右边那个]对应的[ ,
其实向前一个个判断就可以了,不会超时。。。

tip: 主要要找到最里面的那对[],可以用string 的find方法进行查找,
比如 ss.find("]") , 也可以指定从哪个下标开始查找,ss.find("]",idx) ,不指定默认为0
时间复杂度是O (n * m) ,n为主串长度,m为待查找的子串长度

void solve(){cin>>ss;int r=ss.find(']');//循环直到不存在]while(r!=-1){int l=r;//找到离他最近的[while(ss[l]!='[')l--;//提取这一对[]中所有内容,第一个参数为从哪里提取,第二个参数为提取的串长度string tmp=ss.substr(l+1,r-l-1);string ins="";//cout<<tmp;//处理数字int cnt=0;if(tmp[0]>='0'&&tmp[0]<='9')cnt=cnt*10+tmp[0]-'0';tmp.erase(tmp.begin(),tmp.begin()+1);if(tmp.size()&&tmp[0]>='0'&&tmp[0]<='9'){cnt=cnt*10+tmp[0]-'0';tmp.erase(tmp.begin(),tmp.begin()+1);}//cout<<cnt<<endl;//cout<<tmp;while(cnt--){ins+=tmp;}ss.erase(l,r-l+1);//	cout<<ss<<endl;//将处理后的结果插回到主串中,第一个参数为插入到哪里,第二个参数为插入的字符串ss.insert(l,ins);//cout<<ss;//	break;r=ss.find(']');}cout<<ss;//
}

G P1591 阶乘数码 - 洛谷

高精度,注意idx控制最高位

void solve(){cin>>n>>k;int idx=1;num[1]=1;int tmp=0;for(int i=2;i<=n;i++){for(int j=1;j<=idx||tmp;j++){//这里是一大错点,超过上一次结果范围的地方不要×iif(j<=idx)tmp+=num[j]*i;num[j]=tmp%10;tmp/=10;idx=max(j,idx);}}int res=0;for(int i=idx;i>=1;i--)if(num[i]==k)res++;cout<<res<<endl;
}

H P2234 [HNOI2002] 营业额统计 - 洛谷

震惊,逆天测试样例,暴力就能过了。。。

void solve(){cin>>n;int res=0;for(int i=1;i<=n;i++){cin>>a[i];}res+=a[1];for(int i=2;i<=n;i++){int minv=1e18;for(int j=1;j<i;j++){minv=min(minv,abs(a[i]-a[j]));}res+=minv;}cout<<res<<endl;}

赛后怎么能局限于过题呢?
不能用O(\(n^2\)) , 那正解是什么?

数据结构 set 有一个很好用的k=st.lower_bound(x), 可以在O(n \(log_2 n\))的时间找到set中大于等于x的第一个数,也可以用这个得到小于x的第一个数(k--)
注意lower_bound返回的是一个地址,使用的时候要 * k

void solve(){cin>>n;set<int>st;st.insert(-1e18),st.insert(1e18);int res=0;for(int i=1;i<=n;i++){cin>>a[i];if(i==1){res+=a[i];}else {auto k= st.lower_bound(a[i]);int minv=abs(*k-a[i]);k--;if(*k!=-1e18){minv=min(minv,abs(*k-a[i]));}res+=minv;}st.insert(a[i]);}cout<<res<<endl;
}

I P4447 [AHOI2018初中组] 分组 - 洛谷

赛时没想到怎么写,索性跳过了,暂时想不到的题目可以跳过,等其他题目过了再来看(怎么我越跳越多了💦)

一开始看到想二分答案,但是没想到怎么写check

赛后看到dalao的二分查找, 其实我们可以通过维护两个数组,一个数组用于记录一个小队的长度,另一个用来记录该小队最后一个人期望添加的队友能力值。

Q:怎么知道需要插在哪个小队里还是单开一个呢?多组小队所需能力相同时,怎么确保添加到人数最少的那组呢?
A : 排序,同时排序可以发现,相同值时下标越大,该组的大小越小。

int a[N];
int idx;
int need[N];
int siz[N];
void solve(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);need[1]=a[1]+1,siz[1]=1;idx=2;for(int i=2;i<=n;i++){int l=1,r=idx-1;while(l<r){int mid=(l+r+1)>>1;if(need[mid]<=a[i])l=mid;else r=mid-1;}if(need[l]!=a[i]){need[idx]=a[i]+1,siz[idx]=1;idx++;}else {need[l]++,siz[l]++;}}int minv=1e18;for(int i=1;i<idx;i++)minv=min(minv,siz[i]);cout<<minv<<endl;
}

J P3853 [TJOI2007] 路标设置 - 洛谷

二分答案,首先找到单调性:空旷指数越大,所用路标肯定越少

对于两个相邻的路标,如果他们的空旷值小于或等于我们二分出来的x,
那么无需操作;若大于我们的x , 我们就需要使用路标。

需使用个数为$$ \left \lceil \frac{ (a[i]-a[i-1])}{x} \right \rceil -1$$

bool check(int x){int res=0;for(int i=1;i<=n+1;i++){int tmp=a[i]-a[i-1];if(tmp==0)continue;int sum=tmp/x;if(tmp%x)sum++;res+=sum-1;if(res>k)return 0;}return 1;
}
void solve(){cin>>l>>n>>k;for(int i=1;i<=n;i++)cin>>a[i];a[n+1]=l;int l=1,r=10000000;while(l<r){int mid=l+r>>1;if(check(mid))r=mid;else l=mid+1;}cout<<l<<endl;
}

K P2719 搞笑世界杯 - 洛谷

赛时觉得我可以直接用组合数写出来, 但是失败了。。。

线性dp

double f[1300][1300];
//设 f[i][j] 为还剩i张A类免费票,j张B类双倍价钱票时,
//最后两个人拿到两张同样的票的几率
void solve(){cin>>n;n/=2;for(int i=2;i<=n;i++)f[i][0]=f[0][i]=1;//如果只剩一种票了,最后两个人拿到两张同样的票的几率就为1for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){//d[i-1][j](当前同学拿了A类票)和d[i][j-1](当前同学拿了B类票)f[i][j]=f[i][j-1]*0.5+f[i-1][j]*0.5;}}printf("%.4f",f[n][n]);
}

L P1364 医院设置 - 洛谷

链式前向星存图,参考dalao题解:图的遍历:链式前向星详解 - AcWing
之后对每一个点跑一遍bfs就可以啦

#include <bits/stdc++.h>
#define int long long 
#define PII pair<int,int>
#define pb push_back
#define fi first
#define se second
const int N=1e6+10,M=1010,mod=1e9+7;
using namespace std;
int n,m,k;
int h[N],e[N],ne[N],w[N],idx;
struct nod{int id,len;int from;
};
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
} 
void solve(){cin>>n;memset(h,-1,sizeof h);for(int i=1;i<=n;i++){int ww,u,v;cin>>ww>>u>>v;w[i]=ww;if(u){add(i,u),add(u,i);}if(v){add(i,v),add(v,i);}}int minv=1e18;for(int i=1;i<=n;i++){int res=0;queue<nod>qq;qq.push({i,1,i});while(qq.size()){nod tmp = qq.front();qq.pop();for(int i=h[tmp.id];~i;i=ne[i]){int j=e[i];if(j==tmp.from)continue;res+=tmp.len*w[j];qq.push({j,tmp.len+1,tmp.id});if(res>minv)break;}}minv=min(minv,res);}cout<<minv<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int _=1;//cin>>_;while(_--)solve();return 0;
} 

M P4145 上帝造题的七分钟 2 / 花神游历各国 - 洛谷

线段树,也看到有dalao用树状数组写:浅谈树状数组 - AcWing
待补。。。

N P2513 [HAOI2009] 逆序对数列 - 洛谷

待补。。。

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

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

相关文章

STM32上进行卡尔曼滤波

1.卡尔曼滤波介绍 卡尔曼滤波的核心是融合测量值和系统模型预测值,消除随机噪声,即用动态加权平均,逐步逼近真实状态。 2.程序简单分析 程序上首先初始化滤波器的参数,然后取芯片内部温度传感器的值,然后进行滤波…

上海团队与华盛顿大学联手:AI实现医学图像精准识别突破

这项由上海医疗图像洞察&#xff08;Medical Image Insights&#xff09;团队的史鹏程、陈佳伟、刘佳琦、张星林&#xff0c;联合华盛顿大学的李雷、滑铁卢大学的陈涛以及西安交通大学的研究人员共同完成的重大研究&#xff0c;于2025年11月发表在arXiv预印本服务器上&#xff…

SEO救星上线!Google Search Console新功能手把手教你秒提收录

SEO救星上线&#xff01;Google Search Console新功能手把手教你秒提收录SEO救星上线&#xff01;Google Search Console新功能手把手教你秒提收录先别急着点按钮&#xff0c;把“门”打开再说点“请求索引”之前&#xff0c;先给页面做个“全身体检”1. 看看有没有瞎写 noinde…

微信立减金回收,2026年最聪明的省钱新姿势你真的知道吗 - 京顺回收

春节脚步渐近,不少人翻看微信钱包时,会意外发现里面悄悄积攒了不少“微信立减金”。这些立减金看似金额不大,但日积月累下来,数量也颇为可观。然而,烦恼也随之而来:有些立减金临近过期,只能眼睁睁看着它们失效,…

多模一体破局:金仓数据库引领文档数据库国产化新征程

多模一体破局&#xff1a;金仓数据库引领文档数据库国产化新征程 在数字化转型的深水区&#xff0c;企业对数据处理的期待早已超越简单的存储与调用。文档数据库凭借其对半结构化数据的天然亲和力&#xff0c;已成为现代应用开发的重要支柱。然而&#xff0c;当企业面临技术自主…

跨平台虚拟机网络故障排查

引言跨平台虚拟机网络架构的常见应用场景网络故障对业务连续性的影响排查工具与方法概述常见网络故障类型虚拟机与宿主机通信失败跨虚拟机间通信问题外部网络访问异常DHCP/DNS配置错误防火墙或安全策略阻断基础排查步骤检查虚拟机网络适配器配置&#xff08;NAT/桥接/仅主机模式…

金仓数据库如何以“多模融合”重塑文档数据库新范式:技术实战与代码示例

文章目录金仓数据库如何以“多模融合”重塑文档数据库新范式&#xff1a;技术实战与代码示例一、性能实测&#xff1a;直面行业标杆&#xff0c;展现硬核实力二、内核筑基&#xff1a;企业级能力的原生继承三、无缝迁移与极致可用四、实践验证&#xff1a;电子证照系统的平滑替…

新加坡科技设计大学:AI音乐生成终于学会“听懂“人类喜好了

这项由新加坡科技设计大学AMAAI实验室的Dorien Herremans和Abhinaba Roy共同完成的研究发表于2025年11月&#xff0c;论文编号为arXiv:2511.15038v1。对这项突破性研究感兴趣的读者可以通过该编号查找完整论文内容。说起AI作曲&#xff0c;你可能已经听过那些能根据文字描述生成…

Meta团队首次发现:AI研究助手的成功竟然靠“不断试错“?

一支来自Meta FAIR实验室的研究团队&#xff0c;联合伦敦大学学院、Meta超级智能实验室和英属哥伦比亚大学的学者们&#xff0c;在2025年11月发表了一项开创性研究。这项研究深入探讨了什么让AI研究助手变得更加出色&#xff0c;论文发表在国际顶级学术期刊上&#xff0c;编号为…

《企业元宇宙架构设计,AI应用架构师如何打造经典》

企业元宇宙架构设计&#xff1a;AI应用架构师如何打造经典 一、引言&#xff1a;企业元宇宙不是噱头&#xff0c;是数字化转型的下一站 钩子&#xff1a;你见过“能预测未来”的工厂吗&#xff1f; 去年&#xff0c;我去参观一家长三角的汽车零部件工厂&#xff0c;车间里没有传…

基于 Flutter × OpenHarmony 构建应用选择主题部分实现

文章目录基于 Flutter OpenHarmony 构建应用选择主题部分实现前言背景Flutter OpenHarmony 跨端开发介绍开发核心代码心得总结基于 Flutter OpenHarmony 构建应用选择主题部分实现 前言 在现代移动应用开发中&#xff0c;“关于应用”页面是用户了解应用信息的重要入口。它…

激发集体好奇心的团队活动设计

激发集体好奇心的团队活动设计关键词&#xff1a;集体好奇心、团队活动设计、团队协作、创新思维、互动体验摘要&#xff1a;本文聚焦于激发集体好奇心的团队活动设计。通过系统分析背景&#xff0c;阐述核心概念&#xff0c;介绍具体算法原理与操作步骤&#xff0c;构建数学模…

实用指南:React Native学习路径与资源推荐

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Doris数据导入方案大全:从Kafka到HDFS的完整链路实现

Doris数据导入方案大全:从Kafka到HDFS的完整链路实现 1. 引入与连接 1.1 引人入胜的开场 想象一下,你是一家电商公司的数据分析师,每天都会有海量的用户行为数据产生,比如用户的浏览记录、购买记录、加购行为等等。这些数据就像一座巨大的金矿,如果能合理地挖掘和分析,…

导师推荐8个AI论文工具,专科生轻松搞定毕业论文!

导师推荐8个AI论文工具&#xff0c;专科生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今学术环境中&#xff0c;越来越多的专科生开始借助 AI 工具来提升论文写作效率。尤其是随着 AIGC&#xff08;人工智能生成内容&#xff09;技术的发展&#x…

数据持久化——PlayerPrefs

内存和硬盘内存&#xff08;RAM&#xff09; 是电脑的 “临时工作台”&#xff1a;用于临时存放 CPU 正在处理的数据和程序。CPU 可直接、快速访问内存中的数据&#xff0c;速度以纳秒&#xff08;ns&#xff09;计。断电后数据全部丢失&#xff08;易失性存储&#xff09;。硬…

100个实用小工具8-deepCFD二维流场神经网络 - 详解

100个实用小工具8-deepCFD二维流场神经网络 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

2026国内最新针织高弹面料品牌top10推荐!广东广州等地优质面料供应商权威榜单发布,品质与创新双优助力服饰产业升级 - 品牌推荐2026

随着消费升级与服饰产业智能化转型,针织高弹面料作为服装功能性与舒适性的核心载体,市场需求呈现爆发式增长。据中国纺织工业联合会最新行业报告显示,2025年国内针织高弹面料市场规模突破800亿元,年增长率达15%,但…

RHCSE--ansible2--剧本

Ansible PlaybookAnsible Playbook&#xff08;剧本&#xff09;是 Ansible 核心配置文件&#xff0c;采用 YAML 格式编写&#xff0c;用于定义一系列有序的自动化任务集合&#xff0c;描述 “要在哪些远程主机上执行哪些操作”。YAML 基本规则YAML 是一种易读的序列化格式&…

亲测好用9个AI论文平台,专科生毕业论文必备!

亲测好用9个AI论文平台&#xff0c;专科生毕业论文必备&#xff01; AI 工具如何助力论文写作&#xff0c;让学术之路更轻松 在当前的学术环境中&#xff0c;AI 工具正逐渐成为学生和科研工作者不可或缺的助手。特别是在论文写作过程中&#xff0c;AI 不仅能帮助降低 AIGC 率&a…