Codeforces 1379B.Dubious Cyrpto

1 题目描述(题目链接

在这里插入图片描述

2 题解

  由题意得, n a = m + c − b na=m+c-b na=m+cb,则 n a ∈ [ m + l − r , m + r − l ] na\in [m+l-r,m+r-l] na[m+lr,m+rl]。对于 a ∈ [ l , r ] a\in [l,r] a[l,r],遍历求解 n = ⌊ m + r − l a ⌋ n=\lfloor \cfrac{m+r-l}{a} \rfloor n=am+rl,并验证 n ∗ a n*a na是否在上述范围内,如果在,则 b , c b,c b,c的值只需要满足 c − b = n a − m c-b = na-m cb=nam即可。

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;

int main(int argc, const char * argv[]) {
    // insert code here...
    int t;
    cin>>t;
    ll l[20], r[20], m[20];
    ll i, a, n;
    ll left, right;
    for (i = 0; i < t; i++){
        cin>>l[i]>>r[i]>>m[i];
    }

    for (i = 0; i < t; i++){
        left = l[i] - r[i] + m[i];
        right = r[i] - l[i] + m[i];
        for (a = l[i]; a <= r[i]; a++){
            n = floor(right/a);
            if (left <= a*n && a*n <= right){
                break;
            }
        }
        
        if (a*n - m[i] < 0)
            cout<<a<<" "<<r[i]<<" "<<r[i]+a*n-m[i]<<endl;
        else
            cout<<a<<" "<<r[i]+m[i]-a*n<<" "<<r[i]<<endl;
    }
    return 0;
}
t = int(input())

l, r, m = [], [], []

for i in range(t):
    lrm = input().split()
    l.append(int(lrm[0]))
    r.append(int(lrm[1]))
    m.append(int(lrm[2]))

for i in range(t):
    left = m[i] + l[i] - r[i]
    right = m[i] + r[i] - l[i]

    for a in range(l[i], r[i] + 1):
        n = right//a
        if left <= a*n <= right:
            break
    if a*n < m[i]:
        print(a, r[i], r[i]+a*n-m[i], end=" ")
    else:
        print(a, r[i]+m[i]-a*n, r[i], end=" ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值