BestCoder-Round#33

写在前面

  • 这是我第一次做BestCoder, 熟悉了一下BestCoder的模式.
  • BC上并不是只能看英文, 后面的Chinese view下的链接是中文题目
  • 交的次数是会影响得分的. 所以有了把握再交. 至少样例要过吧.
  • 一定要考虑所有特殊情况, 因为有许多积极的Hacker正等着你上钩. 即使交过Accepted之后一旦被Hack成功一分都没有. 唉…
  • 我的第一次BestCoder比赛就以两个题被Hack两个题不会结束了.
  • 感觉BestCoder的比赛还是很刺激的. 拼手速, 拼细心, 拼代码能力.
  • 题目: http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=571

赛后题解

  • 第一题字符串, 但我发现我字符串的基本功还是不行啊, 做了近一个小时(一开始不知道有中文题面, 到处找翻译也费了不少时间), 还是看别人代码打的.

    • 不能输出前导零
    • 结果是0也不能不输出
    • 被hack后改呀改, 终于发现我在输出时如果数字大于10也用的+’0’输出…
  • 第二题倒是挺顺利的想到解法. 首先, 拐点一定是1或者n. 把1作为拐点时, 假设1在第i个位置上, 除了1之外还有n-1个数字, 1的左面可以从n-1个数字中任选i-1个数字, 而且有且只有一种排法(递减), 选完左侧右侧也就确定了, 且也只有一种排法(递增). 而把n当作拐点的排法总数和1时相等, 同时要注意到1, 2, …, n 和 n, n-1, …, 1 的排列被计算了两次. 总结果要减去2. 那么总的排法就是

    ans=2i=0n1C(n1,i)2=22n12=2n2

    如果在比赛时想到这里就提交, 你会发现你A了, 但如果你在Hack的时间时去群里看一下, 就会发现事情并不单纯.

    • 当n = 1时, 总的排法应该是 1 而不是 2^1 - 2 = 0. 全部递增的序列和全部递减的序列并没有被算两次. 因为它一共就一个序列.
      所以要加特判, n=1时输出 1
      完了吗? 没有…(hack好强大)
    • 因为数据范围很大, 10^18, long long ? 但是乘法时可能溢出, 所以还需要写快速乘, 在矩阵乘法的题里曾用到过. 我当时犹豫要不要写, 但看到第一次提交AC后就没有写. 我当时还不知道hack有多强大.
      到这里, 所有问题应该都解决了吧?
      唉, 又调了好半天. 各种习惯不好导致的错误
    • 首先 n=1 时不能简单的输出1, 因为m还可能等于1
    • 然后, 记得把所有变量都开long long
    • 最后一个是我犯的错误, 在快速幂和快速乘的时候我先把传入的两个参数都模了…&%#……
  • A, B题都是基础的东西, 但掌握的都不好

  • 觉得做BestCoder很刺激样子.

  • 第三题后来看别人的代码弄明白了. 用map实现的DP

    • 先按照解决问题最早开始的时间先后排序
    • map<int, long long> f[2] 来记录状态. map是当前时间到最大分数的映射. f[2] 是滚动数组.
    • 如果选择放弃解决当前的问题, 就从上个状态的时间转移到当前状态的时间即可, 分数不变.
    • 如果选择解决当前问题, 就从上个状态的一个时间(pre_t)转移到当前状态的一个合法时间, 分数加上当前问题的分数. 这里需要考虑哪个时间是合法的, 如果pre_t加上任务所需时间早于最早完成时间, 就转移到最早完成时间, 否则转移到pre_t加上任务所需时间.
    • 用迭代器遍历map需要满足map里至少有一个元素吧. 所以先插入一个(0, 0)预处理.
    • 用map实现的状压感觉好厉害…
    • 还有记得该开long long的时候就开… 又在这里卡了一阵

赛后代码

A: https://code.csdn.net/snippets/619782
B: https://code.csdn.net/snippets/619742
C: https://code.csdn.net/snippets/619822


比赛结果

被hack的很惨, 其实还是自己弱

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值