其实这是一道大大大水题
看题加思考加代码一共不到20分钟
题目不可能出现不合法的情况
直接模拟就好
//P1905 堆放货物 #include<bits/stdc++.h> using namespace std; int n,p; int w[4]; int pp[2550][1050];//第一位是船号 第二维是物品数 int cnt[2550];//记录一艘船上放了几个物品 int main(){ cin>>n>>p; for(int i=1;i<=n;i++){ int s; scanf("%d",&s); w[s]++; //记录1,2,3 出现次数 } int len=1;//记录分到了第几个船 for(int i=1;i<=3;i++){ for(int j=1;j<=w[i];j++){ len=len%p; pp[len][++cnt[len]]=i; len++; } } for(int i=0;i<p;i++){ for(int j=cnt[i];j>=1;j--){//从下到上 cout<<pp[i][j]<<" "; } cout<<endl; } return 0; }