2024 华为软件精英挑战赛决赛代码(初赛粤港澳赛区冠军,复赛粤港澳赛区冠军,全球总决赛第 4 名))GitHub

这是 2024 华为软件精英挑战赛 “适可而止矣,涓埃之事,亦央原神” 队的决赛代码。

我们属于粤港澳赛区,三名队员(cqyhfxsf)都是来自华南理工大学的本科生。在2024华为软件精英挑战赛中成绩如下:

  • 初赛:粤港澳赛区冠军

  • 复赛:粤港澳赛区冠军、全国第 2 名

  • 决赛:全球总决赛第 4 名(季军/三等奖)


成功之处:

  • 我们的代码实现能力比较强,能够高效准确地将想法落地并测试效果。有很多想法预期效果很好但实际徒劳无功甚至负作用,而个别想法看似普通却会有很惊喜的效果。我认为将 idea 快速落地并测试是在华为软挑取得好成绩的关键。
  • 有一点点算法基本功(三人都有 icpc/ccpc 银),但相比其他一些队伍并不亮眼。
  • 虽然没有单元测试,但编写了很多集成测试,帮助我们迅速定位没有正常达到目标的模块。
  • 临时抱佛脚学习了 git(之前只会用 zip 压缩+微信传代码)、cmake、clang-format 等工具,并写了一些 python 和 shell 脚本。利用工具提升效率。

不足之处:

  • 三人都没有大厂实习经验,缺乏项目合作开发的流程。例如没有需求和交付的流程和文档,git 分支混乱,git 流程不规范,缺乏设计模式的使用等。
  • 在决赛中,策略过于保守(意图避免出大错,也不算是一件坏事)。

main.cpp

#ifdef USE_MFMC
std::cerr << "DEFINE USE_MFMC" << std::endl;
#endif

#ifdef AVOID_SWING
std::cerr << "DEFINE AVOID_SWING" << std::endl;
#endif

#ifdef RAND
unsigned rand_seed = static_cast<unsigned>(time(nullptr));
srand(rand_seed);
std::cerr << "srand = " << rand_seed << std::endl;
#endif

#ifdef LOCAL
std::cerr << "DEFINE LOCAL" << std::endl;
#endif

#ifdef DEBUG
fprintf(stderr, "DEFIND DEBUG\n");
#endif

#if !defined(_WIN32) && !defined(_WIN64)
// 将 main 线程绑定到 cpu 0 上
pthread_t main_thread_id = pthread_self();
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
CPU_SET(0, &cpu_set);
pthread_setaffinity_np(main_thread_id, sizeof(cpu_set), &cpu_set);

fprintf(stderr, "Set CPU!\n");
#endif

Init(); // 初始化
Control(); // 控制所有帧