#include <stdio.h> #include <string.h> //还是按考试时的想法来做 int main() { int num; scanf("%d",&num); int a[num]; for(int i=0;i<num;i++) { scanf("%d",&a[i]); } int b[20];//座位 memset(b,0,sizeof(b)); int jg[20][5];//存储结果 memset(jg,0,sizeof(jg)); for(int i=0;i<num;i++) { //printf("hello %d\n",i); int flag=0; int t=a[i]; for(int j=0;j<20;j++)//能不能分配到邻座 { if((5-b[j])>=a[i])//如果能满足要求 { flag=1; b[j]=a[i]+b[j]; for(int k=0;k<5;k++) { if((t>0)&&(jg[j][k]==0)) { t--; jg[j][k]=i+1; } } break; } if(flag==1) { break; } } /* for(int m=0;m<20;m++) { printf("\n"); for(int n=0;n<5;n++) { printf("%d ",jg[m][n]); } } printf("\n");*/ if(flag==0)//不能分配到邻座 { int t=a[i]; for(int m=0;m<20;m++) { for(int n=0;n<5;n++) { if((t>0)&&(jg[m][n]==0)) { t--; jg[m][n]=i+1; } if(t==0) { break; } } if(t==0) { break; } } } /* for(int m=0;m<20;m++) { printf("\n"); for(int n=0;n<5;n++) { printf("%d ",jg[m][n]); } }*/ } /* for(int m=0;m<20;m++) { printf("\n"); for(int n=0;n<5;n++) { printf("%d ",jg[m][n]); } } printf("\n");*/ for(int i=0;i<num;i++)//输出 { int t=a[i]; for(int m=0;m<20;m++) { for(int n=0;n<5;n++) { if((t>0)&&(jg[m][n]==i+1)) { t--; //printf("%d %d ",m,n); printf("%d ",m*5+n+1); } } } printf("\n"); } /* for(int i=0;i<100;i++) { printf("%d ",jg[i]); }*/ /* for(int i=0;i<20;i++) { printf("\n"); for(int j=0;j<5;j++) { printf("%d ",b[i][j]); } }*/ /* printf("%d\n",num); for(int i=0;i<num;i++) { printf("%d ",a[i]); } */ return 0; }