您的位置:首页 > 大数据 > 人工智能

Moonfang's Birthday&&2011 Multi-University Training Contest 3 - Host by BIT

2012-01-07 11:59 357 查看
题意:有一个人要过生日了,为了给他过生日他的同伴给他对钱,,但是每个同伴的钱都不一样,但是为了尽可能的平均,让你设计一种算法,,求出在尽可能平均的情况下每人对的钱数。。

思路:先把同伴拥有的钱数从小到大排序,,,每次取平均数和拥有的钱数中少的那个为该同伴最后需要对的钱数。。。。

AC代码:

#include<iostream>
#define N 10001
#include<algorithm>
#include<string.h>
using namespace std;
typedef struct
{  int val;
int id;
int w;
}Node;
Node s
;
bool cmp1(const Node& a,const Node& b)
{ if(a.val!=b.val) return a.val<b.val;
else    return a.id>b.id;
}
bool cmp(const Node& a,const Node& b)
{return a.id<b.id;}
int main()
{ int Case;
cin>>Case;
while(Case--)
{ int n,m;
cin>>n>>m;
int sum=0;
for(int i=0;i!=m;++i)
{   cin>>s[i].val;
sum+=s[i].val;
s[i].id=i;
}
if(sum<n) {cout<<"IMPOSSIBLE"<<endl;continue;}
sort(s,s+m,cmp1);
sum=n;
for(int i=0;i<m;++i)
{ s[i].w=min(s[i].val,sum/(m-i));
sum-=s[i].w;
}
sort(s,s+m,cmp);
for(int i=0;i<m-1;++i)
cout<<s[i].w<<" ";
cout<<s[m-1].w<<endl;
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  training struct 算法 im
相关文章推荐