• Croc Champ 2013 Finals (online version, Div. 1)


    题目链接

    比赛时就搞了个C,赛后补了A B

    A : 给你一个环形的跑道,长度为了,有n个人站在跑道上,当跑步开始时,每个人会以相同的速度顺时针或者逆时针(等概率)行进,当两个人相撞后,他们会继续原来的方向前进。现在问你,t 时间后,相撞次数的期望是多少。

    如果两个人往同一个方向前进的话,肯定就无法碰到了,只要是相反方向就肯定会碰到(只要时间足够),可以看出,两个人碰到后,就开始一圈圈重复了,所以大致的做法如下

    相遇的次数可以表示为一个式子

     (2*t - x) / L + 1  

    x是两个点之间的距离 

    接着化简 , 试着把x独立出来 , 即 

    (2*t - 2*t%L + 2*t%L - x + L ) / L

    然后是2*t/L + (2*t%L-x+L)/L

    所以可以看出,任意两个点都会相撞2*t/L次,至于能不能多撞一次,要看2*t%L >= x 是否成立。 

    统计多余的一次碰撞的时候可以维护一个指针扫描过去。。。。

    http://codeforces.com/contest/309/submission/3736059

    B题:好题一枚。。。

    给你n个字符串,要你输出若干个连续的字符串,总的字符串个数最多,而且能按照要求输出。

    要求是不超过R行,每行的字符个数不超过C个(包括每两个字符串中间的空格)

    对于从i位置开始的字符串,我们要能知道R行最远能到哪里,那首先先解决这样一个问题:从某个字符串往后,C个字符最远能到哪(即可以用来输出一行),这个比较简单,直接搞个变量根据单调性不断地往右移动就好了。

    现在,我们知道了每个字符串往后,输出一行,最远能到达的位置,那如果要知道输出2行,3行最远到哪怎么办,暴力的复杂度是n^2的,显然不行,考虑倍增思想,

    f[i][j]表示从第i+1个字符串开始,输出 2^j行最远能到达的字符串位置,那么比如我们要知道第i个字符串往右15行最远能到达的位置可以这样子,先找到第i个字符串往右8行最远能到达的位置(8=2^3),再接着找这个位置往右4行最远能到达的位置,然后找当前位置往右2行,再是往右一行,就是利用二进制的思想。。。

    输出的时候暴力输出就好了,细节问题整了好久啊

    http://codeforces.com/contest/309/submission/3735302

    C题:坑题一枚。。。

    比赛的时候被黑两次,所幸最后过了,,,

    就是二进制拆分,然后贪心,先把B数组中小的放到A中大的里面,如果直接将2^4的放到一个16的容器里面,会导致其他没法放了

    http://codeforces.com/contest/309/submission/3730640


    Summary : 最近概率,期望的题目出现的频率有点高,以后要加强这方面的练习了,B题其实如果用倍增法结果类似的题就应该能做出来的,我还做的不多。。。


  • 相关阅读:
    [AngularJS] angular-schema-form -- 1
    [MODx] 10. Using Babel for Muti-languages support
    [AngularJS] Using AngularJS interceptors with $http
    [AngularJS] Best Practise
    [Node.js] Creating Demo APIs with json-server
    [HTML5] Input accepts only 6 number characters
    [Heroku] How to pull, push changes
    Runoob-Java-Maven:Maven 引入外部依赖
    Runoob-Java-Maven:Maven 构建 & 项目测试
    Runoob-Java-Maven:Maven 构建 Java 项目
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3087558.html
Copyright © 2020-2023  润新知