zoukankan      html  css  js  c++  java
  • 【NOIP2017 D1 T1 小凯的疑惑】

    题目描述

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

    输入输出格式

    输入格式:

     

    输入数据仅一行,包含两个正整数 aa  bb,它们之间用一个空格隔开,表示小凯手 中金币的面值。

     

    输出格式:

     

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

    【数据范围与约定】

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

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

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

    【题解】

            ①可以得到结论:ans=a*b-a-b(然后你可以水掉它或者继续到②)

            ②

            引理:不定方程:ax+by=c若有解,a,b,c>0                   

                    则必有一特解使得-a<y0≤0,x>0;

          (引理可以用数轴法,不再赘述)

          证明:

           先证ax+by=ab-a-b在题设下无解   

    -》   a(x+1)+b(y+1)=ab  可得:a|y+1 b|x+1 ,

            于是可设:y=k2*a-1,x=k1*b-1     k1,k2>0

    -》   ab*(k1+k2-1)=0  即(k1+k2-1)=0矛盾;

           再证ax+by=ab-a-b+k(k>0)在题设下必有解   

    -》   a(x+1)+b(y+1)=ab+k 设x+1=x1,y+1=y1 不失正确性的将它 拆成:

             ax1+by1=ab    …①           ax2+by2=k    …②

           由①可得x1=0,y1=a的特解,由②再加引理可得有一组x2>0,-a< y2≤0 加一加就可以得到原方程必有一组解使得x>0,0<y≤a;

           综上即ab-a-b为ans

           证毕。

     1 #include <cstdio>
     2 #include <iostream> 
     3 #include <cstring>
     4 #include <algorithm>
     5 #define ll long long 
     6 #define Run(i,l,r) for(int i=l;i<=r;i++) 
     7 #define Don(i,l,r) for(int i=l;i>=r;i--)
     8 using namespace std;
     9 ll a,b;
    10 int main()
    11 {    cin>>a>>b;
    12     cout<<a*b-a-b<<endl;
    13     return 0;
    14 }//by tkys_Austin;
    View Code

              

  • 相关阅读:
    Java 注解(Annotation)
    定时任务相关介绍
    Linux基础命令yum
    Linux基础命令rpm
    Linux基础命令date(如何设置时间? 如何同步时间?)
    Linux基础命令tar(如何压缩文件?如何解压文件?如何不解压查看内容?)
    Linux基础命令gzip
    Linux基础命令zip unzip (压缩 解压)
    Linux中压缩的概念(什么是压缩包?)
    Linux基础命令练习答案7.27
  • 原文地址:https://www.cnblogs.com/Damitu/p/7953421.html
Copyright © 2011-2022 走看看