Codeforces Round #653 (Div. 3)解题报告

Codeforces Round #653 (Div. 3)解题报告

比赛链接

A - Required Remainder

题意

给定三个数 x , y , n x,y,n x,y,n,求使得 k % x = y , 0 ≤ k ≤ n k\%x=y,0\leq k\leq n k%x=y,0kn的最大的 k k k

思路

显然我们可以直接算出比 n n n小的满足 k % x = y k\%x=y k%x=y的值:

  1. n − n % x + y n-n\%x+y nn%x+y
  2. n − n % x − x + y n-n\%x-x+y nn%xx+y

第一个式子可能大于 n n n,第二个式子肯定不大于 n n n,判断一下即可。

代码

//
// Created by Visors on 2020/7/6.
//

#include <iostream>

using namespace std;

int main() {
   
    int t;
    cin >> t;
    while (t--) {
   
        int x, y, n;
        cin >> x >> y >> n;
        cout << ((n - n % x + y <= n) ? (n - n % x + y) : (n - n % x - x + y)) << endl;
    }
    return 0;
}

B - Multiply by 2, divide by 6

题意

在一次移动中,你可以将n乘以2或将n除以6(如果n被6整除,没有余数)。
你的任务是找出从n获得1所需的最少移动次数,或者确定是否不可能做到这一点。

你必须回答t个独立的测试案例。

翻译来自DeepL

思路

估算界限

显然我们的操作的最终步骤是要把数除6得到1。

题目中 1 ≤ n ≤ 1 0 9 1\leq n\leq 10^9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值