zoukankan      html  css  js  c++  java
  • UVA-10726 Coco Monkey(递推)

    题目大意:n个人,m个猴子分桃,第一个人把桃子分成n份余下m个,第一个人将余下的给猴子,拿走自己的那份。第二个人把剩下的桃子也分成n份,余下m个,将余下的分给猴子,拿走自己的那份。………… 直到n个人如此做完之后,剩下的桃子数正好是能被n个人平分。求在区间[l,r]中,有几个值可能是原来的桃子数。

    题目解析:最后剩下的桃子数一定是n*(n-1)的倍数,枚举即可。

    代码如下:

    # include<iostream>

    # include<cstdio>

    # include<cstring>

    using namespace std;

    double f(int u,int s,int m)

    {

      double uu=(double)u;

      for(int i=1;i<=s;++i){

        uu=uu*s/(s-1)+m;

      }

      return uu;

    }

    bool is(double n)

    {

      int a=(int)n;

      return n==(double)a;

    }

    int main()

    {

      int i,s,m,a,b,T,cas=0;

      scanf("%d",&T);

      while(T--)

      {

        scanf("%d%d%d%d",&s,&m,&a,&b);

        printf("Case %d: ",++cas);

        int u=s*(s-1);

        int ans=0;

        for(i=1;;++i){

          double uu=f(i*u,s,m);

          if(uu>=a&&uu<=b&&is(uu))

            ++ans;

          if(uu>b)

            break;

         }

        printf("%d ",ans);

      }

      return 0;

    }

  • 相关阅读:
    linux信号
    APM浅析
    Jackson高并发情况下,产生阻塞
    [转]slf4j 与log4j 日志管理
    2015-09-27 git学习
    MySQL学习笔记-锁相关话题
    MySQL学习笔记-MySQL数据库优化实践[转]
    MySQL学习笔记-事务相关话题
    几个关于网站架构和性能的问题(我在知乎上的问答)
    MySQL学习笔记-数据库文件
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4672577.html
Copyright © 2011-2022 走看看