记录编号 256426 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [ZLXOI 2015]殉国 最终得分 100
用户昵称 GravatarKCkwok 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2016-04-30 11:27:46 内存使用 0.31 MiB
显示代码纯文本
//啊。。。。我竟然看不懂题解23333 
//%拜神犇dudu 
//总感觉背下来不太好,还是背下来了。。。 
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL; 
LL max_oil,min_oil,cnt,t;

void swap(LL &x,LL &y){
	x=x^y;y=y^x;x=x^y;
}

LL exgcd(LL a,LL b,LL &x,LL &y){
	if(b==0){
		x=1;y=0;
		return a;
	}else{
		LL dx,dy;
		LL q=exgcd(b,a%b,dx,dy);
		x=dy;
		y=dx-(a/b)*dy;
		return q;
	}
}

int main(){
	freopen("BlackHawk.in","r",stdin);
	freopen("BlackHawk.out","w",stdout);
	LL d,a,b,c,x,y,l,r;
	cin>>a>>b>>c; 
	if(a<b)swap(a,b);
	d=exgcd(a,b,x,y);
	if(c%d){
		cout<<-1<<" "<<-1<<"\n";
		cout<<0<<"\n";
		return 0;
	}
	LL dx=b/d,dy=a/d;
	x*=(c/d);y*=(c/d);
	if(x%dx==0)l=-x/dx;
	else{
		if(-x/dx<0)l=-x/dx;
		else l=-x/dx+1;
	}
	if(y%dy==0)r=y/dy;
	else{
		if(y/dy<0)r=y/dy-1;
		else r=y/dy;
	}
	if(r<l) swap(l,r);
	max_oil=(x+y)+(dx-dy)*r;
	min_oil=(x+y)+(dx-dy)*l;
	cnt=r-l+1;
	if(min_oil>max_oil)swap(min_oil,max_oil);
	cout<<min_oil<<" "<<max_oil<<"\n";
	cout<<cnt<<"\n";
	return(0);
}