有一批n个数据需要通过rpc调用获取信息,为了加快速度,我们想要把n个数据平均分成若干份,每份的数据量为x(x可以整除n),假设一次rpc调用所需要的时间为a+b*x^2(其中a、b为常数),那么当给出a、b和n的时候,请求出一个x使得总时间最少,若有多个x满足,请输出最小的x。
INPUT输入数据包含多组数据(<=15)。每一组只有一行三个整数a、b(1 <= a, b <= 10^6)和n(1 <= n <= 10 ^ 6)OUTPUT每组数据输出一行一个数,题目要求的x。SAMPLE INPUT2 2 32 1 3SAMPLE OUTPUT11记录每个x所花费的总时间(n/x)*(a+b*x*x),记录x,放到优先队列里,读出第一个就肯定符合条件#include<iostream>#include<functional>#include<queue>#include<cstdio>using namespace std;struct node{long long x;long long value;friend bool Operator < (node n1,node n2){if(n1.value == n2.value) return n1.x > n2.x;else return n1.value > n2.value;}};int main(){long long a,b,n;long long i;node D;PRiority_queue<node>qn;while(scanf("%lld%lld%lld",&a,&b,&n)!=EOF){ while(!qn.empty()){ qn.pop(); }for(i=1;i<=n;i++){ if(n%i==0){ D.value=n/i*(a+b*i*i); D.x=i; qn.push(D); }} D=qn.top(); printf("%lld/n",D.x);}}
新闻热点
疑难解答