Light oj--1275(二次函数)
2015-12-03 21:17
316 查看
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 - 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
6
1 0
0 1
4 3
2 8
3 27
25 1000000000
Sample Output
Case 1: 0
Case 2: 0
Case 3: 0
Case 4: 2
Case 5: 4
Case 6: 20000000
解题思路: 题目表示看了很久,后来才明白题意,就是求保证T(C - T*N)达到最大值.时,T取最小值.注意T是整数,问题就转换成二次函数中点到顶点的距离了。但当c==0||n==0时不是二次函数,输出0就行了。
代码如下:
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
6
1 0
0 1
4 3
2 8
3 27
25 1000000000
Sample Output
Case 1: 0
Case 2: 0
Case 3: 0
Case 4: 2
Case 5: 4
Case 6: 20000000
解题思路: 题目表示看了很久,后来才明白题意,就是求保证T(C - T*N)达到最大值.时,T取最小值.注意T是整数,问题就转换成二次函数中点到顶点的距离了。但当c==0||n==0时不是二次函数,输出0就行了。
代码如下:
#include<stdio.h> #include<string.h> int main(){ int t,n,c,cas,s; double m; cas=1; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&c); printf("Case %d: ", cas++); if(n==0||c==0){ printf("0\n"); continue; } m=c*1.0/(2*n); s=(int)m; if(s+1-m<m-s) printf("%d\n",s+1); else printf("%d\n",s); } return 0; }
相关文章推荐
- 清汤酸菜鱼的做法
- Spark1.5.2安装--Spark学习(基础)
- Failed to load JavaHL Library解决方法
- PAT练习基础编程题目之统计个位数字
- MyEclipse2014中SVN的使用方法
- Jackson序列化和反序列化Json数据完整示例
- Android作业分组与选题
- OC基础(22)
- 反素数(暴力)
- 网上文库文档免费下载
- 从头认识java-12.1 为什么需要RTTI(Run-Time Type Identification)?
- 06 maven问题 "Could not calculate build plan: Plugin 'jarPrefix':'jarName':'jarVersion' "
- 用Intent调用系统中经常被用到的组件
- TS科普17 有条件访问表
- [Python3.4] 从HTTP代理网站批量获取代理并筛选
- Android是否联网判断
- jquery esay ui学习
- 关于缓存使用中的一些看法
- Ramsey theorem in Combinarotics
- hadoop1.x和hadoop2.x的对比