您的位置:首页 > 其它

10249 The Grand Dinner

2013-02-27 13:42 302 查看
#include<cstdio>

#include<cstring>

#include<cstdlib>

int min(int a,int b)

{

return a>b?b:a;

}

struct S

{

int id,x;

int c[110];

} a[110],b[110];

int cmp(const void *a,const void *b)

{

struct S *p = (struct S *)a;

struct S *q = (struct S *)b;

return q->x-p->x;

}

int cmp1(const void *a,const void *b)

{

struct S *p = (struct S *)a;

struct S *q = (struct S *)b;

return p->id-q->id;

}

int cmp2(const void*a,const void *b)

{

return *(int *)a-*(int *)b;

}

int main()

{

int n,m;

while(scanf("%d%d",&n,&m)==2)

{

if(!n&&!m) break;

for(int i = 0; i < n; i++)

{

scanf("%d",&a[i].x);

a[i].id = i;

}

for(int i = 0; i < m; i++)

{

scanf("%d",&b[i].x);

b[i].id = i;

}

qsort(a,n,sizeof(a[0]),cmp);

qsort(b,m,sizeof(b[0]),cmp);

int flag=0;

for(int i = 0; i < n; i++)

{

int t = a[i].x,tb=0,lc=0;

for(int j = 0; j < min(t,m); j++)

{

if(b[j].x)

{

b[j].x--;

a[i].c[lc++] = b[j].id;

tb++;

}

else t++;

}

if(tb<t)

{

flag=1;

break;

}

}

qsort(a,n,sizeof(a[0]),cmp1);

if(flag) printf("0\n");

else

{

printf("1\n");

for(int i = 0; i < n; i++)

{

qsort(a[i].c,a[i].x,sizeof(a[i].c[i]),cmp2);

for(int j = 0; j < a[i].x; j++)

printf("%d%c",a[i].c[j]+1,j==a[i].x-1?'\n':' ');

}

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: