poj 1018
来源:互联网 发布:中国域名管理机构 编辑:程序博客网 时间:2024/06/11 15:28
poj 1018
这道题数据处理量比较大,用的时候应避免动态经常申请内存,排序用qsort速度较好。
#include<assert.h>#include<iostream>#include<fstream>#include<string>#include<algorithm>#include<time.h>using namespace std; struct DEV{int B;int p;int id;friend int cmp(const void *d1,const void *d2){DEV* x=(DEV*)d1; DEV* y=(DEV*)d2; if((x->B)==(y->B)) //当带宽相等时 { if((x->p)==(y->p)) //当价格也相等时 return (x->id)-(y->id); //以编号为第三优先升序排序 return (x->p)-(y->p); //以价格为第二优先升序排序 } return (x->B)-(y->B); //以带宽为第一优先升序排序 }};int min(const int* maxB,int n){int min=maxB[0];for(int i=1;i<n;i++){if(maxB[i]<min)min=maxB[i];}return min;}int main( ){ ifstream cin("input.txt"); int t;cin>>t;DEV* dev=new DEV[10001];int* maxB=new int[101];int* rem=new int[101];while(t--){double maxP=0;int n;int m=0;cin>>n;memset(maxB,0,sizeof(int)*n);for(int i=0;i<n;i++){int mi;cin>>mi;int b,p;while(mi--){ DEV d; cin>>d.B>>d.p; d.id=i; if(d.B>maxB[i]) maxB[i]=d.B; dev[m++]=d;}} qsort(dev,m,sizeof(DEV),cmp); for(int i=0;i<m-(n-1);i++){if(dev[i].B>min(maxB,n)){break;}memset(rem,-1,sizeof(int)*n);rem[dev[i].id]=dev[i].p;for(int j=i+1;j<m;j++){if(rem[dev[j].id]==-1){rem[dev[j].id]=dev[j].p;//count++;continue;}if(dev[j].p<rem[dev[j].id]){rem[dev[j].id]=dev[j].p;}} double sumP=0; for(int i=0;i<n;i++) { // assert(rem[i]==-1); sumP+=rem[i]; }sumP=(double)dev[i].B/sumP;if(sumP>maxP)maxP=sumP;}printf("%.3f\n",maxP);} delete maxB; delete dev; delete rem; return 0;}
- POJ 1018
- poj 1018
- POJ 1018
- POJ-1018
- poj 1018
- POJ 1018
- poj 1018
- 【POJ】1018
- poj 1018
- poj 1018
- poj 1018
- poj 1018
- POJ-1018
- poj 1018
- POJ 1018
- POJ-1018
- poj 1018 Communication System
- POJ 1018 Communication System
- 感动那件小事!
- 如何修改FLASH动画
- 【DP】饥饿的牛
- Ext树级联选中父节点和子节点
- PowerPoint2007不能输入中文的问题
- poj 1018
- JAVA STOP方法的不安全性
- zigbee协议与开发-NWK层作用解析
- Putty中文乱码解决方法
- svn防止提交错误文件的方法
- web 测试要点
- 关于网络学习
- 如何简单的在JSP里实现乘法口诀表
- SVM学习(五):松弛变量与惩罚因子