Nowcoder practice 60 D.斩杀线计算大师(扩展欧几里得)

Nowcoder practice 60 D.斩杀线计算大师(扩展欧几里得)


思路:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
#define mst(a) memset(a,0,sizeof a)
void egcd(ll a,ll b,ll &x,ll &y){
	if(b==0){
		x=1,y=0;
		return;
	}
	egcd(b,a%b,x,y);
	ll tmp=x;
	x=y;
	y=tmp-a/b*y;
}
int main(){
	ll a,b,c,k,t;
    cin>>a>>b>>c>>k;
    ll g=__gcd(a,b);
	for(int i=0;i<=k/c;i++)
	{
		if((k-i*c)%g==0)
		{
			ll x,y;
			egcd(a,b,x,y);
			t=(k-i*c)/g;	// ax=gcd(modb) ax%b=(a*x%b)%b ax%b=(ax+b)%b 
			ll x1=x*t,y1=y*t,b1=b/g;  //ax与b同余 b1最小的对x1操作的。 
			x1=(x1%b1+b1)%b1;//保证x1>=0 x1+b1*t 找到最小整数解 x1%b1找到在0-b1范围内 若小于0则加上b1 
			y1=(k-i*c-x1*a)/b;
			if(x1>=0&&y1>=0)
			{
				 printf("%lld %lld %lld\n",x1,y1,i);
				 break;
			}
		}	
	} 
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
在记录秋招的大魔王很...:别被忽悠了,我做了多年销售。我可以告诉你,这就是忽悠你的,销售一定要看底薪也要看提成两者不可缺一。提成是有业绩的时候才拿的到的,谁能保证一直有单状态都好。销售有时候很讲究运气的。底薪是你这个人这个岗位日常工作体现的价值。别小看底薪,你看那些跳槽去做经理主管的,底薪底一些,人家愿意去吗?所以那些说销售靠提成的纯属忽悠,除非他们的业务很容易成单。
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务