noip欢乐赛10.24 分火腿

news/2024/12/24 10:06:30

分火腿

题目描述:

小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿。为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份。请问最少要切几刀?

输入描述:

第一行一个整数T,表示有T组数据。

接下来T组数据,每组共一行,有两个数字nm

输出描述:

每组数据一行,输出最少要切的刀数。

样例输入:

2

2 6

6 2

样例输出:

4

0

数据范围:

100%的数据保证T<=1000n,m<=2147483647

蒟蒻吐槽:

  一道奇奇怪怪的数学题吧?貌似。题目可以分为两种情况,n>m或者n<m,但其实,在n>m的情况中,把多余的火腿直接整个分给其他人就可以了。所以n-=n/m*m。然后就变成了n<m的情况了。在n<m中,可以把n根火腿看成一根大火腿,在1/n.2/n,3/n···

n-1/n处已经被切过了,而为了平均分配,我们要在1/m,2/m,3/m···m-1/m处再次切割,所以我们只需要求二者交集,交集是我们可以偷懒的刀数,而我们总共要砍m-1刀。

以上就是对这道题的感性认知。

  重要的理性思维到来了!虽然很烦,但这是历史的必然啊!已经被切过的刀位置定义为p/n,需要的刀定义为q/m。通分得pm/mn和qn/mn,二者交集等价于pm=qn,从p=n,q=m出发易得p,q同时除以gcd(m,n)后,等式才可以继续成立,又因为p和q中较小的是p所以交集个数受n限制,即个数=(n-1)/gcd(n,m)。为什么要减一呢?注意了,p<=n-1所以ans=m-1-(n-1)/gcd(n,m)。顺便附上代码。

 

代码

 

#include<cstdio>

int gcd(int a,int b)
{
    int r=a%b;
    while(r!=0)
    {        
        a=b;
        b=r;
        r=a%b;
    }
    return b;
}
int main()
{
    freopen("hdogs.in","r",stdin);
    freopen("hdogs.out","w",stdout);
    int T,a,b,x,ans;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&a,&b);
        if(a%b==0){printf("0\n");continue;}
        a=a-b*(a/b);
        x=gcd(a,b);
        x=a/x;
        ans=b-1-(a-1)/x;
        printf("%d\n",ans);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/mofangk/p/7725549.html


http://www.niftyadmin.cn/n/1999900.html

相关文章

mbr mysql_mbr是什么?

MBR即主引导记录&#xff0c;全称Main Boot Record&#xff0c;是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位&#xff0c;它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。通常&#xff0c;我们将…

(六)easyUI之对话框窗口

一、拥有HTML的对话框 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><%String pathrequest.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q…

诸葛亮是刘备最器重的人才么

诸葛亮是刘备最器重的人才么 近来&#xff0c;对诸葛亮军事才能的评论比较多。有的认为诸葛亮军事才能不高&#xff0c;于演义和历史上对其的评价相差甚远&#xff1b;还有的则认为诸葛亮不愧为伟大的军事家。本文从另一个角度来分析一下诸葛亮的军事才能&#xff0c…

mysql concat 子查询_对MySQL中的子查询使用GROUP_CONCAT

我有一个MySQL查询&#xff0c;其中我想包括来自另一个表的ID列表。在网站上&#xff0c;人们可以添加某些项目&#xff0c;然后人们可以将这些项目添加到他们的收藏夹。我基本上想得到ID的人谁拥有该项目(这是一个有点简化&#xff0c;但这是它归结为)的列表。基本上&#xff…

Spring Cloud Edgware新特性之二:如何配置Zuul的Hystrix线程池

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大&#xff0c;组件丰富&#xff0c;设计优雅。目前Spring Cloud还在不断发展之中。 Spring Cloud即将发布Spring Cloud Edgware 版本。该版本解决了不少Bug&#xff0c;新增了不少新特性&#xff0c;本系列博客将为大家…

蜀中缘何无大将

蜀中缘何无大将 “蜀中无大将&#xff0c;廖化作先锋”&#xff0c;这句成语所揭示的原本是三国后期蜀汉人才奇缺的历史事实&#xff0c;后来则引伸为泛指因为没有杰出人才&#xff0c;平庸之辈也能侥幸成名&#xff0c;与“山中无老虎&#xff0c;猴子称霸王”意义相近。唐朝…

mysql自动增量备份_mysql自动增量备份的例子(本地备份与远程备份)

mysql自动增量备份的例子(本地备份与远程备份)&#xff0c;有需要的朋友可以参考下。1、本地备份编写自动备份脚本&#xff1a;vim /var/lib/mysql/autobak内容如下&#xff1a;复制代码 代码如下:cd /data/home/mysqlbakrq date %Y%m%d /usr/local/mysql/bin/mysqldump sqldb …

线性表的链式存储结构的实现及其应用(C/C++实现)

存档----------- 1 #include <iostream.h>2 typedef char ElemType;3 #include "LinkList.h"4 void main()5 {6 LinkList h;7 ElemType e;8 int i0;9 int t0; 10 cout<<"(1)初始化单链表h\n"; 11 InitList(h); 12 …