【数学-二元一次方程求最值】LightOJ Internet Service Providers 1275

来源:互联网 发布:淘宝网现状 编辑:程序博客网 时间:2024/05/15 11:35

1275 - Internet Service Providers
PDF (English)StatisticsForum
Time Limit: 2 second(s)Memory Limit: 32 MB

A group of N Internet Service Provider companies (ISPs) use a private communication channel that has a maximum capacity of C traffic units per second. Each company transfers T traffic units per second through the channel and gets a profit that is directly proportional to the factor T(C - T*N). The problem is to compute the smallest value of T that maximizes the total profit the N ISPs can get from using the channel. Notice that N, C, T, and the optimal T are integer numbers.

Input

Input starts with an integer T (≤ 20), denoting the number of test cases.

Each case starts with a line containing two integers N and C (0 ≤ N, C ≤ 109).

Output

For each case, print the case number and the minimum possible value of T that maximizes the total profit. The result should be an integer.

Sample Input

Output for Sample Input

6

1 0

0 1

4 3

2 8

3 27

25 1000000000

Case 1: 0

Case 2: 0

Case 3: 0

Case 4: 2

Case 5: 4

Case 6: 20000000

 

题意:

给出N,C,求最小的T使T*(C-T*N)的值最大。

解题思路;

二元一次方程求最值的方法。注意对称轴的结果可能为小数,需要考虑的是左右两边的整数,哪个离对称轴最近。

AC代码;

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int main(){    int t,xp=1;    scanf("%d",&t);    while(t--){        long long n,c;        scanf("%lld%lld",&n,&c);        printf("Case %d: ",xp++);        if(!n||!c)printf("0\n");        else{            long long x=c/2/n;            long long X=x*(c-x*n);            long long X1=(x+1)*(c-(x+1)*n);            if(X>=X1)            printf("%lld\n",x);            else printf("%lld\n",x+1);        }    }    return 0;}



0 0
原创粉丝点击