FOJ 2014.3 有奖月赛

本文回顾了一场编程比赛的经历,详细解析了每道题目的解题思路与技巧,涵盖文件系统模拟、几何问题解决、字符串操作、并查集应用、动态规划、树形DP、数字密码匹配及字符串匹配等多个算法与数据结构主题。从文件系统的简单模拟到几何问题的巧妙解决,再到字符串操作的深入理解,作者分享了每题的核心解法与个人思考。比赛不仅考验了选手的算法能力,还涉及到数据结构的应用和细节处理,是提升算法素养和比赛经验的良好案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                FOJ 2014.3 



由于跑A区去面试的原因,这次比赛没参加,回来时已经四点多了,过了H题,然后D题交了一发,没考虑一个盟国只有一个国家的情况,wa了一次,之后就结束比赛了…具体说下每道题吧。

 

A. 文件系统 

 

简单模拟题。 把题目意思理清楚就比较简单了。每个组给一个编号,并记录它的成员,然后对每个文件进行判断就可以了。(徐伟拿了一血!!)

 

B. A simple geometric problems 

 

题目意思是给n个点,求最多能选多少个点组成凸多边形。这题一开始没想到思路,后来在博兄的指点下才明白了……明白之后就觉得比较简单了,果断好久没写计算几何了,反应比较迟钝了。

首先对n个点组成的n*(n-1)条线段进行极角排序,从小到大。因为我们逆时针来看,后一条线段的极角一定要大于前一条的。 然后枚举第i个点为起点时,遍历排序好后的线段数组,不断更新其他点的状态,即到这点之前最多有多少个点。 时间复杂度 o(n^3)

 

C. YesOrNo 

 

首先得反应出来其实两个等价的串,如果将它们看成一个环的话,它们是相等的。怎么看出这点来呢,可以在纸上画一画找规律。其实如果我们将一个串的首尾连起来看,X操作其实只是将首尾位置变换到了X操作的点的位置,还是原来那个环,丝毫没变。明白了这点后就好办了。

先将两个A串连接起来,只要B串是其子串即可。这里采用KMP判断。貌似题目数据弱了,直接暴力O(n^2) 判断也是可以0ms AC的。

 

D. 盟国 

 

题目涉及两个操作,一个是两个国家结盟,另一个是某个国家退盟,很容易反应出是并查集。但是直接搞的话,退盟操作就有些麻烦了。

可以考虑给每个国家一个编号,退盟之后的国家再给一个新的编号,即放到末尾去,那它之前那个编号就不用管了,因为它已经没有任何影响了,这样我们就对那些编号进行并查集就可以了。需要注意的一个地方就是:有可能一个盟国只有一个国家,这个时候退盟不会增加盟国数量,注意这点这题就没问题了。

 

E. Climb Stairs 

 

 

简单dp; dp[i]表示爬i层楼有dp[i]种方式;

dp[i] = dp[i-a] + dp[i-b];  dp[0] = 1;

所以答案就是 dp[a]*dp[b-a]*[n-b] (a<b) (注意要用64位整数)

 

F. ProgramCaicai's Trees 

 

树形dp ,比较简单

dp[i][0] 表示第i个点才用0方式时以它为根的子树的最小的代价

dp[i][1] 表示第i个点才用1方式时以它为根的子树的最小的代价

 

dp[i][0] = c[i][0] + Σ min(dp[j][0]+ C00 , dp[j][1]+ C01)

dp[i][1] = c[i][1] + Σ min(dp[j][0]+ C10 , dp[j][1]+ C11)

其中j 为i的子节点

答案就是 min(dp[1][0],dp[1][1]);

 

G. 数字密码 

 

这题比较蛋疼,一开始大意理解错了,以为是连续字串,直接就想到AC自动机DP了,代码都敲完了,发现错了,sad……

这里是子序列,要注意。 一个直接的想法就是一个n维dp,匹配到每个串的第多少位时所需的最少的位数,然后转移自然即使枚举下一位取哪个字符串的下一位了。 不过n维dp直接搞在C++里面应该不好弄。我想的办法是将这个状态Hash成一个整数,因为最多7个串,所以可以将它采用7进制方式来hash,

然后就可以直接dp了。 实现的时候还是要小心点,能优化的地方有优化一下,不然会超时。

 

H. WuYou 

 

直接dfs就好了,参数记录这一位是否是第一位,以及A 是否已经小于B 了;

 

当A 已经小于 B 了,那么碰到问号,就直接取 9 就行了

如果还没:

如果这一位不是问号,并且在这一位上已经大于B了,那么直接返回

不然这一位就直接是A 在这一位的值了

 

如果是问号: 那么想取与B相等的,然后考虑比B小1的情况

 

细节认真想想就OK了 !

 

第一次写题解,写得比较烂,如果大家要代码可以QQ问我要,有更好的解法可以QQ跟我交流。

 

 

 

 

内容概要:本文介绍了MATLAB实现DBN-RBF深度置信网络结合RBF神经网络多输入单输出回归预测的详细项目实例。项目旨在通过深度置信网络(DBN)和径向基函数神经网络(RBF)的结合,设计出一种高效的回归预测模型,以应对高维数据和非线性关系的挑战。DBN用于无监督特征提取,RBF用于快速回归,两者结合显著提升了预测精度和模型泛化能力。文中详细描述了项目的背景、目标、挑战、解决方案、模型架构、代码实现、GUI设计、性能评估及未来改进方向。 适合人群:具备一定编程基础,对机器学习和深度学习有一定了解的研发人员,尤其是从事金融预测、医疗健康、智能制造等领域的工程师和技术人员。 使用场景及目标:①解决高维数据的特征提取难题,提升非线性回归的拟合精度;②通过无监督学习与快速训练能力的结合,提高模型的预测精度和泛化能力;③应用于金融预测、医疗健康、智能制造等多个领域,提供高效的回归预测工具;④通过实时数据流处理和GPU加速推理,确保系统在实时应用中的快速响应。 其他说明:此项目不仅提供了详细的理论分析和代码实现,还涵盖了系统架构设计、模型部署与应用、安全性与用户隐私保护等方面的全面指导。通过结合其他深度学习模型、多任务学习、增量学习等技术,项目具备广阔的扩展性和应用前景。系统还支持自动化CI/CD管道、API服务与业务集成、前端展示与结果导出等功能,确保了系统的高可用性和易用性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值