A. Fair Divisionhttp://59.67.33.130/toj/contest/showp160_A.html#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;struct Node
{
int num;
int max;
int fin;
}stu[101];bool cmp(Node a,Node b)
{
if(a.max>b.max)
return true;
else if(a.max==b.max&&a.num<b.num)
return true;
else return false;
}int main()
{
int t;
cin>>t;
while(t--)
{
int p,n;
cin>>p>>n;
int i,j,k;
int sum=0;
for(i=0;i<n;i++)
{
stu[i].num=i;
cin>>stu[i].max;
sum+=stu[i].max;
}
if(sum<p)
{
cout<<"IMPOSSIBLE"<<endl;
continue;
}
//еепР
sort(stu,stu+n,cmp);
//for(i=0;i<n;i++)
//printf("stu[%d].num=%d .max=%d/n",i,stu[i].num,stu[i].max); int aver=0;
int temp=n-1; while(temp>=0)
{
if(p%(temp+1)==0)
aver=p/(temp+1);
else aver=p/(temp+1);
//printf("p=%d/n",p);
//printf("aver=%d/n",aver);
//printf("temp=%d/n",temp);
//printf("stu[%d].num=%d/n",temp,stu[temp].num);
if(aver<=stu[temp].max)
{
stu[stu[temp].num].fin=aver;
p-=aver;
temp--;
}
else {
stu[stu[temp].num].fin=stu[temp].max;
p-=stu[temp].max;
temp--;
}
}
for(i=0;i<n-1;i++)
printf("%d ",stu[i].fin);
printf("%d/n",stu[i].fin);
}
return 0;
}
TJU Exercise Contest 2011(7) A题
最新推荐文章于 2016-08-26 16:39:35 发布