LightOJ 1275 - Internet Service Providers

ゝ一世哀愁。 2022-08-18 05:57 145阅读 0赞

1275 - Internet Service Providers










PDF (English) Statistics Forum







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*(C-N*T),问当T取什么值(整数值)时能让这个函数式的值最大。(T取满足条件的最小值)。

题解:很明显,就是一个求一元二次方程最高点横坐标的问题。顶点坐标(-b/(2*a),(4*a*c-b*b)/(4*a))。要注意的地方是求出T后,是向下取整的,最大的整数最高点可能落在T+1上,这里需要比较一下。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. int main()
  6. {
  7. int cn=0;
  8. int t;
  9. scanf("%d",&t);
  10. while(t--)
  11. {
  12. long long n,m;
  13. scanf("%lld%lld",&n,&m);
  14. printf("Case %d: ",++cn);
  15. if(n==0||m==0)
  16. {
  17. printf("0\n");
  18. }
  19. else
  20. {
  21. long long cm1,cm,a1,a2;
  22. cm=(m/(2*n));
  23. a1=(-n*cm*cm)+m*cm;
  24. cm1=cm+1;
  25. a2=(-n*cm1*cm1)+m*cm1;
  26. if(a2>a1)
  27. {
  28. printf("%lld\n",cm1);
  29. }
  30. else
  31. printf("%lld\n",cm);
  32. }
  33. }
  34. return 0;
  35. }

发表评论

表情:
评论列表 (有 0 条评论,145人围观)

还没有评论,来说两句吧...

相关阅读