zoukankan      html  css  js  c++  java
  • Frogs

    Problem Description
    There are m stones lying on a circle, and n frogs are jumping over them.
    The stones are numbered from 0 to m1 and the frogs are numbered from 1 to n. The i-th frog can jump over exactly ai stones in a single step, which means from stone j mod m to stone (j+ai) mod m (since all stones lie on a circle).

    All frogs start their jump at stone 0, then each of them can jump as many steps as he wants. A frog will occupy a stone when he reach it, and he will keep jumping to occupy as much stones as possible. A stone is still considered ``occupied" after a frog jumped away.
    They would like to know which stones can be occupied by at least one of them. Since there may be too many stones, the frogs only want to know the sum of those stones' identifiers.
     
    Input
    There are multiple test cases (no more than 20), and the first line contains an integer t,
    meaning the total number of test cases.

    For each test case, the first line contains two positive integer n and m - the number of frogs and stones respectively (1n104, 1m109).

    The second line contains n integers a1,a2,,an, where ai denotes step length of the i-th frog (1ai109).
     
    Output
    For each test case, you should print first the identifier of the test case and then the sum of all occupied stones' identifiers.
     
    Sample Input
    3 2 12 9 10 3 60 22 33 66 9 96 81 40 48 32 64 16 96 42 72
     
    Sample Output
    Case #1: 42 Case #2: 1170 Case #3: 1872
     
    Source
     
    这个问题根据我的思想就是,先把所有的都算出来然后根据容斥原理就可以做出来了,我们知道这个 走的路都是K*gcd(a[i],m);
    我们可以这样子推道一下,假设m%a[i]==0  那么这个青蛙走的距离就是a[i]的倍数,我们可以假设一下啊,这是走的最优解,
    要是  gcd(a[i],m)==1这样子的话就是相当于a[i]=a[i]*1; 这样子的话我们可以把所有的解都能求出来了。
    综上我们知道所有的结果就是k*gcd(a[i],m);
     
    要是m小一点的话,我们就能枚举m得到所有的解,但是现在的话根本就是不可以的。首先我是这样子想的就是要是gcd(a[i],m)==1的时候这个时候就是
    0--m-1等差求和,其他的时候就是枚举m的所有
     
     
    机智的我打了一个表,然后发现1e9以内的因子,不过1e3个好像最多的1024吧,,,看到这里真的是太高兴了,,,,
    OK现在我就是开始枚举因子,然后感觉不用什么容斥定理就可以AC了,感觉随便的加加减减就被被人称为容斥定理,但是我感觉真的就是加加减减。
     
    今天下午好好的想一下这个问题,然后就是再做2个问题。。。
    我们假设  3 6     和  2  4   6  我们我们算完2再算3的时候发现6倍多算了一次,然后我们再减去就行了,我还是想简单了,我以为只要把6和4,6删去就行了,但是删去的过程中还是多计算了,然后我感还是套用结论比较好。。
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    线程总结(1)
    (转)远程线程DEMO
    VCL 中TList源码分析
    MVC Controller向View传值(ViewData与ViewBag)
    ASP.NET MVC 下拉框的传值的两种方式(第二种方式未完成)
    将数据在[Excel]和[任何数据源]之间导入导出_可临时保存查询结果
    服务器控件之二
    关闭窗口动画,加速窗口
    让XP控制台字符编码在UTF8与GBK之间切换
    WCF应用的编码实现
  • 原文地址:https://www.cnblogs.com/Heilce/p/6409821.html
Copyright © 2011-2022 走看看