1. 程式人生 > >bzoj 1684: [Usaco2005 Oct]Close Encounter【數學(?)】

bzoj 1684: [Usaco2005 Oct]Close Encounter【數學(?)】

str stream fab ace mat ble CP enc pri

枚舉分母,然後離他最近的分子只有兩個,分別判斷一下能不能用來更新答案即可

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a,b,aa,ab;
double mx=10;
void wk(int x,int y)
{
    if(x*b==y*a)
        return;
    if(fabs((double)x/y-(double)a/b)<mx)
    {
        mx=fabs((double)x/y-(double)a/b);
        aa=x,ab=y;
    }
}
int
main() { scanf("%d%d",&a,&b); for(int i=1;i<=32767;i++) wk(floor((double)a/b*i),i),wk(floor((double)a/b*i)+1,i); printf("%d %d\n",aa,ab); return 0; }

bzoj 1684: [Usaco2005 Oct]Close Encounter【數學(?)】