【心路历程】初次参加蓝桥杯实况
送给大家一句话:
寂静的光辉平铺的一刻,地上的每一个坎坷都被映照得灿烂。 – 史铁生 《我与地坛》
初次参加蓝桥杯有感
- 一点小小的震撼
- 难评的做题过程
- A题 艺术与篮球
- 问题描述
- 解题
- B 题 五子棋
- 问题描述
- 解题
- C题 训练士兵
- 问题描述
- 解题
- D题 团建
- 解题
- E题 成绩统计
- 问题描述
- 解题
- F题 因数统计
- 问题描述
- 解题
- G题 零食采购
- 问题描述
- 解题
- H题 魔法盒子
- 问题描述
- 解题
- 总结
- Thanks♪(・ω・)ノ谢谢阅读!!!
- 下一篇文章见!!!
一点小小的震撼
在今晨的曙光中,我踏进了蓝桥杯的赛场,这是自我踏入大学之门后,首次参与计算机领域的正规比赛。前两周的时间里,我像在荒原上追逐光影,一边是对知识的渴望,一边是时间的逼迫,探索着神秘的dfs算法。仿佛只有通过这种方式(毕竟暴力最好想)。
当我站在真正的试题面前时,却发现事与愿违。那些看似熟悉的题目,在我眼前逐渐展开了一幅幅复杂的图景。我惊愕地发现,那些曾以为可以轻易攻克的堡垒,现在看来竟是高不可攀。这种无力感,像是冷雨中的一丝寒风,让人不禁颤抖。
我的心中充满了复杂的情感:
- 一方面是对这次首战的激动与兴奋,这种感觉如同初次触摸到未知世界的光辉;
- 另一方面则是面对未知挑战时那种深深的无力与惊讶。这种矛盾的情感,就像是在寂静的夜空中追逐流星,美丽而短暂,令人难以忘怀。
我的表现并不好,更像是在赛博大厦前呆滞的哥布林
希望通过这篇博客,未来的学弟学妹们能够从我的经历中汲取教训,找到前行的勇气和智慧。
难评的做题过程
A题 艺术与篮球
问题描述
小蓝出生在一个艺术与运动并重的家庭中。
妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运动的激情和团队合作的精神。
为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照“YYYYMIMIDD”的格式转换成一个8位数,然后将这8位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过50,他就去练习篮球;如果总笔画数不超过50,他就去练习书法。
例如,在2024年1月1日这天,日期可表示为一个8位数字20240101,其转换为汉字是“二零二四零一零一”。日期的总笔画数为2+13+2+5+13+1+13+1=50,因此在这天,小蓝会去练习书法。
以下是汉字的笔画数对照表:
现在,请你帮助小蓝统计一下,在2000年1月1日到2024年4月13日这段时间内,小蓝有多少天是在练习篮球?
解题
首先看题目我就想到了一位故人,哈哈哈。这道题我思考了一下就决定复刻一下我之前实现的日期管理工具。通过类封装来达到对日期的操作,然后采用数组映射来转换为笔画数。
大致代码如下:
#include #include #include #include using namespace std; class Date { public: Date(int year = 2000, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } //关键: 获取当前月的日期 int GetMonthDay(int year, int month) const { int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { return 29; } return day[month]; } //日期++操作 void add() { _day++; while (_day > GetMonthDay(_year, _month)) { _day -= GetMonthDay(_year, _month); _month++; if (_month > 12) { _year++; _month = 1; } } } int DateToInt() { return _year * 10000 + _month * 100 + _day; } private: int _year; int _month; int _day; }; int main() { //笔画映射 int nums[10] = { 13 , 1 , 2 , 3 ,5 , 4 , 4 , 2 , 2 , 2 }; int ans = 0; Date d1(2000, 1, 1); while (d1.DateToInt() != 20240414) { int num = d1.DateToInt(); int sum = 0; while (num) { int n = num % 10; sum += nums[n]; num /= 10; } if (sum > 50) ans++; d1.add(); } cout 0}; int ans = 0; bool judge() { int sum = 0; int cnt = 10000001; for (int i = 0; i n >> s; for (int i = 0; i > man[i][0] >> man[i][1]; } while (1) { if (judge()) break; for (int i = 0; i