• 1275


    1275 - Internet Service Providers
    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

    思路:求导加二分

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<stdlib.h>
     5 #include<string.h>
     6 #include<math.h>
     7 #include<queue>
     8 #include<set>
     9 #include<stack>
    10 #include<map>
    11 #include<set>
    12 using namespace std;
    13 typedef long long LL;
    14 LL ask(LL n,LL m, LL z)
    15 {
    16     return n*(z-n*m);
    17 }
    18 int main(void)
    19 {
    20     int i,j,k;
    21     scanf("%d",&k);
    22     int s;
    23     for(s=1; s<=k; s++)
    24     {
    25         LL x,y;
    26         scanf("%lld %lld",&x,&y);
    27         LL l=-y;
    28         LL r=y;
    29         LL ac=0;
    30         while(l<=r)
    31         {
    32             LL mid=(l+r)/2;
    33             if(y-2*mid*x<=0)
    34             {
    35                 ac=mid;
    36                 r=mid-1;
    37             }
    38             else l=mid+1;
    39         }
    40         LL ck=ac-1;
    41         LL sum1=ask(ac,x,y);
    42         LL sum2=ask(ac-1,x,y);
    43         if(sum2>=sum1)
    44             ac=ck;
    45         printf("Case %d:",s);
    46         printf(" %lld
    ",ac);
    47     }
    48     return 0;
    49 }
    油!油!you@
  • 相关阅读:
    【Blazor】在ASP.NET Core中使用Blazor组件
    Github和Azure DevOps的代码同步
    【.NET Core】在Win10中用VS Code debug
    【UWP】利用EF Core操作SQLite
    【ASP.NET Core】mdl conflicts with tinymce
    【Windows10】如何使用Segoe MDL2 Assets图标
    Docker安装及使用,Docker 安装MySQL、安装Tomcat、安装RabbitMQ
    Anaconda安装常用配置及命令
    MySQL获取周、月、天日期,生成排序号
    Linux常用查询命令
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5569320.html
Copyright © 2020-2023  润新知