写在前面

  • 这是我第一次做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=2∗∑i=0n−1C(n−1,i)−2=2∗2n−1−2=2n−2

    ans = 2 * \sum_{i = 0}^{n - 1}{C(n-1, i)} - 2 = 2 * 2^{n-1} - 2 = 2^n - 2

    假设在比赛时想到这里就提交, 你会发现你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的非常慘, 事实上还是自己弱

$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('

    ').addClass('pre-numbering').hide();
    $(this).addClass('has-numbering').parent().append($numbering);
    for (i = 1; i ').text(i));
    };
    $numbering.fadeIn(1700);
    });
    });

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

BestCoder-Round#33的更多相关文章

  1. hdu4585 &amp; BestCoder Round #1 项目管理(vector应用)

    主题链接:pid=4858">http://acm.hdu.edu.cn/showproblem.php?pid=4858 项目管理 Time Limit: 2000/1000 MS ...

  2. hdu 5643 BestCoder Round #75

    King's Game  Accepts: 249  Submissions: 671  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6 ...

  3. hdu 5641 BestCoder Round #75

    King's Phone  Accepts: 310  Submissions: 2980  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  4. hdu5634 BestCoder Round #73 (div.1)

    Rikka with Phi  Accepts: 5  Submissions: 66  Time Limit: 16000/8000 MS (Java/Others)  Memory Limit: ...

  5. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  6. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  7. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  8. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  9. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  10. 暴力+降复杂度 BestCoder Round #39 1002 Mutiple

    题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...

随机推荐

  1. 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告

    题目地址: https://oj.leetcode.com/problems/merge-k-sorted-lists/ 题目内容: /** * Definition for singly-linke ...

  2. WF系列——工作流基本知识

    工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期的业务目标 ...

  3. 实现能够直接粘QQ贴截图的bug管理功能

    对于一个功能强大的协作平台来说,todo管理和bug管理是不可缺少的功能.Todo和bug往往不是通过一些简单的文字就能实现的,有时候须要配以图片的说名,之前用过的项目管理平台都是以附件的形式上传图片 ...

  4. BackGroundWorker使用总结

    方法: backgroundWorker1.CancelAsync() 用于取消异步执行 backgroundWorker1.ReportProgress(int ,object)用于向主线层报告进度 ...

  5. C++输入输出进制、数据宽度与对齐、精度、取整

    cout<<setw(4)<<setfill('0')<<a<<endl; ////样例输出 a=41输出 0041 1.数的进制 [转载]未完的c++ ...

  6. Xampp mysql无法启动的解决方案(转)

    如果出现mysql 无法启动表明在安装xampp 前已经安装了mysql,造成mysql服务无法启动. [mysql] MySQL Service detected with wrong path23 ...

  7. iOS的图表显示的实现

    在app通常有家居展览的照片,显示广告.或者头条新闻.通常网易新闻client 如图,红框框的位置就是一个典型的图展, 熟悉iOS的人肯定知道,这个是个UIScrollview,里面加几张图片就可以实 ...

  8. SQL server 2005 PIVOT运算符的使用

    原文:SQL server 2005 PIVOT运算符的使用 PIVOT,UNPIVOT运算符是SQL server 2005支持的新功能之一,主要用来实现行到列的转换.本文主要介绍PIVOT运算符的 ...

  9. cocos2dx 3.0 学习笔记 引用cocostudio库 的环境配置

    cocostudio创建UI并应用时须要引用cocostudio库,须要额外的环境配置: 之前已经搭配好了基础的开发环境,包含 1) JDK 2) Python 2.7 3) ant 4) visua ...

  10. javascript的位操作、整数、二进制

    位与(x&y):对操作数进行二进制与的操作,如果两个操作数的某一位两个都为1,将对应的结果位设为1. 0x0007 & 0x0003 = 0x0003 \ 一个小型年老棕色的狗:64 ...