codeforces1379B Dubious Cyrpto

https://codeforces.com/contest/1379/problem/B

可以想到其实就是让n*a=(m-(r-l),m+r-l)中的一个数

然后直接枚举a=l->r

令l2=m-(r-l)算一下刚好n*a>=l2,注意n>0,然后看n*a是否<=m+r-l,是就有解

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxl=3e5+10;

int cas;
ll l,r,m,a,b,c;

inline void prework()
{
	scanf("%lld%lld%lld",&l,&r,&m);
} 

inline void mainwork()
{
	ll l2=m-(r-l),r2=m+(r-l);
	ll d,cb;
	for(a=l;a<=r;a++)
	{
		d=l2/a+(l2%a!=0);
		if(d==0)
			d++;
		if(d*a<=r2)
		{
			cb=d*a-m;
			if(cb>0)
			{
				c=r;
				b=r-cb;
			}
			else
			{
				b=r;
				c=r+cb;
			}
			return;
		}
	}
}

inline void print()
{
	printf("%lld %lld %lld\n",a,b,c);
}

int main()
{
	int t=1;
	scanf("%d",&t);
	for(cas=1;cas<=t;cas++)
	{
		prework();
		mainwork();
		print();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/liufengwei1/article/details/107449669
今日推荐