记录编号 |
256426 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[ZLXOI 2015]殉国 |
最终得分 |
100 |
用户昵称 |
KCkwok |
是否通过 |
通过 |
代码语言 |
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);
}