前言
去年懵懵懂懂,一个人从头自闭到尾,到最后也没对上判题器,复赛第十遗憾离场。今年的开端也是十分不顺,我们提交的第一发线上14s,这时候前排已经有0.x的成绩了,一度陷入深深的自我怀疑之中。好在队友十分carry,多核输出的感觉真的挺爽,后来慢慢找到节奏,一路从二十多名到霸榜、守榜,拿下成渝第一、全国第三的初赛成绩,这段经历甚至比之后的决赛更加有趣。
开源地址:https://github.com/Chadriy/CodeCraft2020
放题
一、 题意描述
通过金融风控的资金流水分析,可有效识别循环转账,辅助公安挖掘洗钱组织,帮助银行预防信用卡诈骗。基于给定的资金流水,检测并输出指定约束条件的所有循环转账,结果准确,用时最短者胜。
分析一下,数学描述就是在一个有向图里找简单环的问题。
二、输入信息
输入为包含资金流水的文本文件,每一行代表一次资金交易记录,包含本端账号ID, 对端账号ID, 转账金额,用逗号隔开。
- 本端账号ID和对端账号ID为一个32位的无符号整数
- 转账金额为一个32位的无符号整数
- 转账记录最多为28万条
- 每个账号平均转账记录数< 10
- 账号A给账号B最多转账一次
三、初步思路
很自然的,意识到这个题目的核心是搜索,所以朴素DFS即可完成任务(万万没想到这就是官方的std),最后对所有结果进行去重和排序。