码迷,mamicode.com
首页 > 其他好文 > 详细

BestCoder-Round#33

时间:2015-03-15 00:52:27      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:hack   bestcoder   

写在前面

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

比赛记录

  • 第一题字符串, 但我发现我字符串的基本功还是不行啊, 做了近一个小时(一开始不知道有中文题面, 到处找翻译也费了不少时间), 还是看别人代码打的.
  • 第二题倒是挺顺利的想到解法. 首先, 拐点一定是1或者n. 把1作为拐点时, 假设1在第i个位置上, 除了1之外还有n-1个数字, 1的左面可以从n-1个数字中任选i-1个数字, 而且有且只有一种排法(递减), 选完左侧右侧也就确定了, 且也只有一种排法(递增). 而把n当作拐点的排法总数和1时相等, 同时要注意到1, 2, …, n 和 n, n-1, …, 1 的排列被计算了两次. 总结果要减去2. 那么总的排法就是
    ans=2?i=0n?1C(n?1,i)?2=2?2n?1?2=2n?2

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

比赛结果

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

技术分享

BestCoder-Round#33

标签:hack   bestcoder   

原文地址:http://blog.csdn.net/qq_21110267/article/details/44265947

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!