题意
给你一个等式
n∗a+b−c=m(l≤a,b,c≤r,1≤m≤1010,1≤l≤r≤500000),其中n,a,b,c,l,r,m都为正整数,输入l,r,m,求a,b,c的值。
题解
以开始以为是二分,后来发现是构造。
易知:m=⌊am⌋∗a+m%a
可以将
n=⌊am⌋,b=l+m%a,c=l,由于题目要求n≥1并且
l≤a,b,c≤r,所以需要加入判断条件:
⌊am⌋≥1且b≤r
如果
⌊am⌋<1,我们可以在前面加上一个a,后面减去一个a。
m=(⌊am⌋+1)∗a+m%a−a
那么我们可以构造
n=⌊am⌋+1,b=r+m%a−a,c=r,
然后判断b是否符合条件,符合输出不符合继续遍历a。
代码
int main()
{
int t;
cin >> t;
while(t--)
{
ll l,r,m;
cin >> l >> r >> m;
for(ll a=l;a<=r;a++)
{
ll n=m/a;
ll x=m%a;
if(n>=1 && x<=r-l)
{
cout << a << ' ' << l+x << ' ' << l << endl;
break;
}
x-=a;
if((r+x)>=l && (r+x)<=r)
{
cout << a << ' ' << r+x << ' ' << r << endl;
break;
}
}
}
}