Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
有同学帮我看看哪儿不对吗?example都通过了,就是wrong answer/*先按min从大到小排序,尽可能的先装满min,再把remain依次分配给各个瓶子,直到装满, 如果所有的都装满,还有剩余的就输出remain,但是如果还有没装满的就表示没有剩余了*/ #include<iostream> using namespace std; typedef struct node{ float min; float max; int n; }NODE; NODE sizes1[101]; int main() { long amount; int num; float minimal,maximal; char c; while(cin>>c) { cin.putback(c); cin>>amount>>num; if(amout==0){cout<<0<<end;continue;} for(int i=1;i<=num;i++) {cin>>minimal>>maximal;sizes1[i].min=minimal/1000;sizes1[i].max=maximal/1000;sizes1[i].n=0;} //按min的大小从大到小排列 for(i=1;i<num;i++) { minimal=sizes1[i].min; int j=i; for(int k=i+1;k<=num;k++) { if(sizes1[k].min>minimal){minimal=sizes1[k].min;j=k;} } NODE t; t=sizes1[i]; sizes1[i]=sizes1[j];sizes1[j]=t; } float remain=0,contain=0; for(i=1;i<=num;i++) { while(1) { contain+=sizes1[i].min; remain=amount-contain; sizes1[i].n++; if(remain>=sizes1[i].min)continue; else { if(remain<0){contain-=sizes1[i].min;remain+=sizes1[i].min;sizes1[i].n--;} break; } } } for(i=1;i<=num;i++) { while(sizes1[i].n>0) { remain=remain-(sizes1[i].max-sizes1[i].min); if(remain>0)sizes1[i].n--; else break; } if(remain<=0){remain=0;break;} } remain=remain*1000; cout<<remain<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator