zoukankan      html  css  js  c++  java
  • [洛谷P3254]圆桌问题

    题目大意:有$m$个单位,每个单位有$r_i$个代表,有$n$张餐桌,每张餐桌可容纳$c_i$个代表。要求同一个单位的代表不在同一个餐桌就餐。若可以,输出$1$以及其中一种方案,否则输出$0$

    题解:贪心,把餐桌大小和单位人数从小到大排序,因为单位规模越大就越难满足,所以我们优先考虑他们。而桌子越多越好,小桌子又容易满而不能用,所以先坐大桌子。

    卡点:

    C++ Code:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m;
    struct node{
    	int num,w;
    }b[300],a[300];
    int s[200][300];
    inline bool cmp(node a,node b){return a.w>b.w;}
    int main(){
    	scanf("%d%d",&m,&n);
    	for (int i=1;i<=m;i++)scanf("%d",&a[i].w),a[i].num=i;;
    	sort(a+1,a+1+m,cmp);
    	for (int i=1;i<=n;i++)scanf("%d",&b[i].w),b[i].num=i;
    	sort(b+1,b+1+n,cmp);
    	for (int i=1;i<=m;i++){
    		int j=1;
    		while (a[i].w){
    			if (j>n){
    				puts("0");
    				return 0;
    			}
    			if (b[j].w){
    				s[a[i].num][++s[a[i].num][0]]=b[j].num;
    				b[j].w--,a[i].w--;
    			}
    			j++;
    		}
    	}
    	puts("1");
    	for (int i=1;i<=m;i++){
    		for (int j=1;j<=s[i][0];j++)printf("%d ",s[i][j]);
    		puts("");
    	}
    	return 0;
    }
    
  • 相关阅读:
    配置文件
    ajax
    网线颜色排序
    cs程序添加初始化加载
    后台设置gridview不换行
    js 经典正则判断 一个字符串是否包含另一个字符串
    窗体关闭事件
    oracle根据视图删除表
    (字符串)哈希
    (字符串)哈希
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9163664.html
Copyright © 2011-2022 走看看