Time Limit: 2MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
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 - TN). The problem is to compute T_optim, 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 T_optim are integer numbers.
Input
Each data set corresponds to an instance of the problem above and contains two integral numbers – N and C – with values in the range from 0 to 10 9. The input data are separated by white spaces, are correct, and terminate with an end of file.
Output
For each data set the program computes the value of T_optim according to the problem instance that corresponds to the data set. The result is printed on the standard output from the beginning of a line. There must be no empty lines on the output.
Sample Input
1 0 0 1 4 3 2 8 3 27 25 1000000000
Sample Output
0 0 0 2 4 20000000
求一个一元二次方程取极值时x的值。-b/(2*a)。。。
因为程序里面除法可能消掉了一部分小数,所以还要判断x+1时的情况,比较一下再输出。
代码:
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #pragma warning(disable:4996) using namespace std; int main() { //freopen("i.txt","r",stdin); //freopen("o.txt","w",stdout); long long n,c; while(scanf("%lld%lld",&n,&c)!=EOF) { if(n==0) { cout<<0<<endl; continue; } else { long long x=c/(2*n); long long y=x+1;//一开始竟写成了减1。。。 cout<<(x*(c-n*x)<y*(c-n*y)?y:x)<<endl; } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。