SGU 551

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
int n, t1, t2;
int gcd(int a, int b) {
    return b == 0 ? a : (gcd(b, a%b));
}
int exg(int a, int b) {
    return a/gcd(a,b)*b;
}
int main(void) {
    //freopen("in.txt", "r", stdin);
    while (~scanf("%d%d%d", &n, &t1, &t2)) {
        int k = exg(t1, t2), s = k/t1 + k/t2, One = n/s, r = n%s, base = One*k,
                Min = 0, cnt = 0, i, j;
        if (t1>t2) swap(t1,t2);
        //printf("s = %d r = %d\n", s, r);
        if (r)

        for (i = 1, j = 1; i+j <= s;) {


            if (cnt >= r) break;
            if (i * t1 < j * t2) Min=i*t1, i++, cnt++;
            else if(i*t1 > j*t2) Min=j*t2, j++, cnt++;
            else Min=j*t2, j++, i++, cnt+=2;

        }

        if ( (i-1)*t1!=(j-1)*t2 && Min == (i-1) * t1) 

                    cnt++, Min = max(Min, j*t2);

       else if ( (i-1)*t1!=(j-1)*t2 && Min == (j-1) * t2) 

                    cnt++, Min = max(Min, i*t1);


        printf("%d %d\n", cnt+s*One, base+Min);
    }
    return 0 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值