XJOI 3404 刷油漆 题解

时间:1s 空间:128M

题目描述:

从1到n有n块砖需要刷油漆,砖的编号被a整除的要被刷成红色,被b整除的被刷成蓝色,同时被a,b整除的既可以被刷成红色,也可以被刷成蓝色。等你刷完后,对于每块红色的砖,老板会奖励给你p个巧克力,对于每块蓝色的砖,老板奖励q个巧克力,问你最多能得到多少巧克力

输入格式:

输入五个整数n,a,b,p,q

输出格式:

输出一个整数

样例输入1:

5 2 3 12 15

样例输出1:

39

样例输入2:

20 2 3 3 5

样例输出2:

51

约定:

1<=n,a,b,p,q<=10^9

提示:

本题主要是抓住同时被A、B整除的砖块,让它们得到更多的巧克力。所以要求最小公倍数。可以用C++的STL轻松解决。具体代码如下:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std ;
int main ( )
{
    long long n , a , b , p , q ;
    scanf ( "%lld %lld %lld %lld %lld" , & n , & a , & b , & p , & q ) ;
    long long k = __gcd ( a , b ) ;      //求最大公因数
    k = a * b / k ;                  //求最小公倍数
    k = n / k ;
    a = ( n / a - k ) * p ;
    b = ( n / b - k ) * q ;
    k = max ( p , q ) * k ;
    printf ( "%lld" , a + b + k ) ;
    return 0 ;
}

猜你喜欢

转载自blog.csdn.net/zj_mrz/article/details/80949407
今日推荐