
2020-11-04 [蓝桥杯2018决赛]阅兵方阵
发布日期:2021-05-15 07:31:22
浏览次数:19
分类:精选文章
本文共 1100 字,大约阅读时间需要 3 分钟。
好久没写过代码了,今天写一篇对自己有感悟的一道题:如何利用空间换取时间。这题挺有意思,在解决的过程中学到了很多编程技巧。
题目是说x国要参加同盟阅兵活动。主办方要求每个加盟国派出的士兵恰好能组成2个方阵。x国发现弱小的y国派出了130人的队伍,他们的士兵在行进中可以变换2种队形:130=81+49=9²+7²,130=121+9=11²+3²。x国君很受刺激,觉得x国面积是y国的6倍,理应变出更多队形。于是他发号施令:我们要派出一支队伍,在行进中要变出12种队形!!!手下人可惨了,要忙着计算至少多少人才能组成12种不同的双方阵。请你利用计算机的优势来计算一下,至少需要多少士兵。
一开始的思路是三层循环:第一层是人数,第二层和第三层是第一种方式和第二种方式的人数。但这样运行起来太慢啦。。。。在网上寻找的时候看到了可以牺牲空间来换取时间,变成两层循环:一层利用数组去存状态。
经过一番思考和研究,写出了如下的代码:
#include #include using namespace std;int main(){ int num[2000000], Min = 10000000; memset(num, 0, sizeof(num)); for (int i = 1; i < 1000; i++) { for (int j = i; j < 1000; j++) { int temp = i * i + j * j; num[temp]++; if (num[temp] > 11) { Min = min(Min, temp); } } } cout << Min << endl; return 0;}
这个代码通过两层循环,利用一个数组来存储每个平方和对应的组合数量。通过这种方式,计算出了最小的士兵人数,使得平方和出现12种以上的组合。最终得出的答案是160225。
这个方案有效地减少了循环的次数,从原本可能要执行几千万次的运算,优化到了大约一百万次,极大地提高了运行效率。同时,二维数组的使用使得空间换取了时间,使得在有限的时间内能够处理更大的数据范围。
在整个过程中,我深刻体会到了空间换时间的道理。在面对需要优化性能的问题时,合理利用内存资源,可以有效提升程序的运行效率。同时,这也让我更加明白了代码优化的重要性,以及如何通过创新的方法来解决看似棘手的问题。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月20日 14时09分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
为什么WGCLOUD安装完后,启动服务端打不开网页
2019-03-11
iOS 开发官方文档链接收集
2019-03-11
linux学习笔记(四)基本用户管理与帮助命令
2019-03-11
小程序:防止父方法被子方法冒泡,使用catchtap
2019-03-11
vue报错 created hook错误
2019-03-11
此主机支持Intel VT-x,但Intel VT-x 处于禁用状态。
2019-03-11
12-面向对象1
2019-03-11
HDU - 4109 Instrction Arrangement
2019-03-11
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
2019-03-12
JQuery--手风琴,留言板
2019-03-12
MFC 自定义消息发送字符串
2019-03-12
goahead 下goaction测试与搭建
2019-03-12
Linux操作系统的安装与使用
2019-03-12
ajax请求出现/[object%20Object]错误的解决办法
2019-03-12
流体运动估计光流算法研究
2019-03-12
如何转载博客
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Grafana导入 Promethus node模板
2019-03-12
如何提高SQL查询的效率?
2019-03-12