4357608 2011-08-08 08:53:29 Accepted 3866 578MS 312K 1259 B C++ ylwh!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
struct man
{
int num;
int maxs;
int use;
}s[10001];
int cmp(struct man a, struct man b)
{
if(a.maxs != b.maxs)
return a.maxs < b.maxs;
else if(a.maxs == b.maxs)
return a.num > b.num;
}
int cmp2(struct man x, struct man y)
{
return x.num < y.num;
}
int main()
{
int t, p, n, i, sum, count , nu;
scanf("%d", &t);
while(t--)
{
sum = 0;
scanf("%d%d", &p, &n);
for(i=1; i<=n; i++)
{
scanf("%d", &s[i].maxs);
s[i].num = i;
sum += s[i].maxs;
}
if(sum < p)
{
printf("IMPOSSIBLE\n");
continue;
}
else if(sum == p)
{
printf("%d", s[1].maxs);
for(i=2; i<=n; i++)
printf(" %d", s[i].maxs);
printf("\n");
continue;
}
sort(s+1, s+n+1, cmp);
count = p;
nu = n;
for(i=1; i<=n; i++)
{
if(s[i].maxs < count / nu)
{
s[i].use = s[i].maxs;
count -= s[i].maxs;
nu--;
}
else
{
s[i].use = count / nu;
count -= s[i].use;
nu--;
}
}
sort(s+1, s+n+1, cmp2);
printf("%d", s[1].use);
for(i=2; i<=n; i++)
printf(" %d", s[i].use);
printf("\n");
}
return 0;
}
HDOJ 3866 Moonfang's Birthday
最新推荐文章于 2016-03-22 11:20:33 发布