您的位置:首页 > 其它

URAL 1430. Crime and Punishment(数论)

2014-11-28 21:22 295 查看
题目链接

题意 :给你a,b,n,让你找出两个数x,y,使得n-(a*x+b*y)最小。

思路 : 分大小做,然后枚举a的倍数

#include <stdio.h>
#include <string.h>
#include <iostream>
#define LL __int64

using namespace std ;

int main()
{
LL a,b,n ;
while(~scanf("%I64d %I64d %I64d",&a,&b,&n))
{
if(a == 1)
{
printf("%I64d 0\n",n) ;
continue ;
}
if(b == 1)
{
printf("0 %I64d\n",n) ;
continue ;
}
bool flag = false ;
if(a < b)
{
swap(a,b) ;
flag = true ;
}
LL t = min(n/a,b) ,x;
LL minn = 999999999LL ;
for(int i = 0; i <= t ; i++)
{
if((n - a * i) % b < minn)
{
minn = (n - a * i) % b ;
x = i;
}
}
if(!flag) printf("%I64d %I64d\n",x,(n-a*x)/b) ;
else printf("%I64d %I64d\n",(n-a*x)/b,x) ;
}
return 0 ;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: