zoukankan      html  css  js  c++  java
  • 小凯的疑惑

    题目描述

    小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。

    输入输出格式

    输入格式:

    两个正整数 aa 和 bb,它们之间用一个空格隔开,表示小凯中金币的面值。

    输出格式:

    一个正整数 NN,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。

    输入输出样例

    输入样例#1:
    3 7
    输出样例#1: 
    11
    

    说明

    【输入输出样例 1 说明】

    小凯手中有面值为33和77的金币无数个,在不找零的前提下无法准确支付价值为1, 2,4,5,8,111,2,4,5,8,11 的物品,其中最贵的物品价值为 1111,比1111 贵的物品都能买到,比如:

    12 = 3 imes 4 + 7 imes 012=3×4+7×0

    13 = 3 imes 2 + 7 imes 113=3×2+7×1

    14 = 3 imes 0 + 7 imes 214=3×0+7×2

    15 = 3 imes 5 + 7 imes 015=3×5+7×0

    【数据范围与约定】

    对于 30\%30%的数据: 1 le a,b le 501a,b50。

    对于 60\%60%的数据: 1 le a,b le 10^41a,b104。

    对于100\%100%的数据:1 le a,b le 10^91a,b109。


    想法

    题目很简单,只要一个式子c=a*b-a-b就行,证明看下面。


    代码

    #include<iostream>
    using namespace std;
    int amin()
    {
        long long int a,b,c;
        cin>>a>>b;
        c=a*b-a-a;
        cout<<b;
        return 0;
    }

    证明

    题目可转化为:设a,b是正整数,求$c_0$的最小值能够让任意c>$c_0$,方程ax+by=c有负整数解;

    因为a,b互质,可将原方程转化为a*(x*0+b*t)+b*(y*0-a*t)=c。

    考虑x的范围

    x<0时,不符合题意。

    x=0时,$c_0$无限大。

    x=b时,c=b的倍数,所以$c_0$无限大。

    x>b时,可转化为x<b的情况。

     因为我们要c0最大,则需要让x最大,则等于b-1。因为方程无非负整数解,所以y<0。那么我们让y=-1,可知:c0=a*b-a-b。

    当c>a*b-a-b时,a*x+b*y>a*b-a-b。b*y>a*b-a-b-a*x>=a*b-a-b-a*(b-1)=-b。则:b*y>-b,y>-1。即:有非负整数解。

    上面证明当c>a*b-a-b时,方程成立,下面证明当c=a*b-a-b时,原方程不成立。

    a*x+b*y=a*b-a-b

    a*b=a*(x+1)+b*(y+1)

    所以说,b|(x+1)且a|(y+1)。

    所以可得:b<=x+1,a<=y+1。

    a*b=a*(x+1)+b*(y+1)>=a*b+a*b=2a*b

    a*b>=2a*b,a*b<=0,

    方程无非负整数解。

    证毕。


    注意:因为1<=a,b<=10^9,所以要开long long.

    美好的一天就此结束!!!!

     

  • 相关阅读:
    P1410 子序列 (动态规划)
    P2085 最小函数值 (堆)
    [ZJOI2007]棋盘制作 (单调栈,动态规划)
    [ZJOI2005]午餐 (贪心,动态规划)
    黑匣子_NOI导刊2010提高 (对顶堆)
    [BZOJ1455] 罗马游戏 (左偏树||并查集)
    P1651 塔 (动态规划)
    两类斯特林数 (组合数学)
    从编程到工程
    失败的过程也是过程
  • 原文地址:https://www.cnblogs.com/abcdhh/p/11038160.html
Copyright © 2011-2022 走看看