1. 题目

传送门= ̄ω ̄=

2. 题解

一开始打了个网络流判断是否有解,然后打个贪心算方案。。。

我是不是傻逼啊,直接贪心算答案,发现算不出不就没解么。

只要一个一个地把人放到桌子上,每次取出空位子最多的桌子就行了。

主要是题目没给出总人数,所以可能会GG。

但是实际是过了的,速度还可以。

代码:

#include <bits/stdc++.h>
#define MKP make_pair
using namespace std;
typedef pair<int,int> PII;
template<typename _Tp>inline void IN(_Tp&dig)
{
    char c;dig=0;
    while(c=getchar(),!isdigit(c));
    while(isdigit(c))dig=dig*10+c-'0',c=getchar();
}
int m,n,r[155],ans[155][275],acnt[155];
priority_queue<PII> pq;
stack<PII> st;
int main()
{
    IN(m),IN(n);
    for(int i=1;i<=m;i++)IN(r[i]);
    for(int i=1,a;i<=n;i++)IN(a),pq.push(MKP(a,i));
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=r[i];j++)
        {
            if(!pq.top().first)puts("0"),exit(0);
            ans[i][acnt[i]++]=pq.top().second;
            st.push(MKP(pq.top().first-1,pq.top().second));
            pq.pop();
        }
        while(!st.empty())pq.push(st.top()),st.pop();
    }
    puts("1");
    for(int i=1;i<=m;i++,putchar('\n'))
        for(int j=0;j<acnt[i];j++)
            printf("%d ",ans[i][j]);
    return 0;
}
分类: 文章

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

发表评论

电子邮件地址不会被公开。 必填项已用*标注

你是机器人吗? =。= *