zoukankan      html  css  js  c++  java
  • 题解【洛谷P3951】[NOIP2017]小凯的疑惑

    题目描述

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

    输入输出格式

    输入格式

    两个正整数 (a)(b),它们之间用一个空格隔开,表示小凯中金币的面值。

    输出格式

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

    输入输出样例

    输入样例#1

    3 7

    输出样例#1

    11

    说明

    输入输出样例1 说明

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

    (12 = 3 imes 4 + 7 imes 0)

    (13 = 3 imes 2 + 7 imes 1)

    (14 = 3 imes 0 + 7 imes 2)

    (15 = 3 imes 5 + 7 imes 0)

    数据范围与约定

    对于 (30\%) 的数据:(1 le a,b le 50)

    对于 (60\%) 的数据:(1 le a,b le 10^4)

    对于 (100\%) 的数据:(1 le a,b le 10^9)

    题解

    这是一道很好的猜结论数论题。

    看到样例,不是(3 imes 7 - 10 = 11)吗?于是,我们大胆地提交了刚才的结论所对应的代码。

    咦?怎么没有(AC)?仔细一看数据范围:(1 le a,b le 10^9)(10^9 imes 10^9)不是爆了(int)吗?于是赶快把(int)改为(long) (long)

    于是,我们就(AC)了!

    不过,我们还是要证明一下刚才的结论:

    设币值分别为(a)(b)

    容易得到:(a imes b)肯定可以用这两个币值表示出来。

    (a imes b - a)呢?当然也可以,用(b - 1)(a)就可以了。

    (a imes b - b)呢?当然也可以,用(a - 1)(b)就可以了。

    (a imes b - a - b)呢?貌似不能了。

    因式分解一下:

    (a imes b - a - b)

    (= a(b - 1) - b)

    (= a(b - 1) - (b - 1) - 1)

    (=(a - 1)(b - 1) - 1)

    分不了了,说明(a imes b - a - b)不能用币值为(a)(b)的钱凑出来。

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <cctype>
    
    using namespace std;
    
    inline long long gi()
    {
        long long f = 1, x = 0; char c = getchar();
        while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
        while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
        return f * x;
    }
    
    long long a, b;
    
    int main(void)
    {
        a = gi(), b = gi();
        cout << a * b - a - b;
        return 0;
    }
    
  • 相关阅读:
    安装最新版本的zabbix
    原 linux添加虚拟ip(手动vip和keepalived方式)
    zzuli OJ 1129: 第几天
    WIN内核线程池函数
    Java中利用Math.random()产生服从泊松分布的随机数
    机房重构所遇问题&quot;未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件&quot;的解决的方法集锦
    二路插入排序
    iOS开发之地图与定位
    2015-07-30Java 错题
    bootstrap, boosting, bagging
  • 原文地址:https://www.cnblogs.com/xsl19/p/11104968.html
Copyright © 2011-2022 走看看