zoukankan      html  css  js  c++  java
  • UVA-1623 Enter The Dragon (贪心)

    题目大意:有n个装满水的湖,m天。每天可能下雨也可能晴天,只要下雨就会把湖填满,若已满,则发洪水。有一台只能在晴天使用的抽水机,每次抽水只能抽一个湖,并且全部抽光。问是否存在一种使得不发洪水的抽水方案。

    题目分析:贪心。贪心策略:对于每个下雨天 i ,让在这天之前的并且在第a[i]个湖上一次水满之后的一个晴天抽走第a[i]个湖中水。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<set>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    set<int>day;
    int ans[1000005],lst[1000005],n,m;
    
    void solve()
    {
        memset(lst,0,sizeof(lst));
        memset(ans,0,sizeof(ans));
        int a,flag=1;
        day.clear();
        for(int i=0;i<m;++i){
            scanf("%d",&a);
            if(!flag)   continue;
            if(!a)
                day.insert(i);
            else{
                ans[i]=-1;
                set<int>::iterator it=day.lower_bound(lst[a]);
                if(it==day.end())
                    flag=0;
                else{
                    ans[*it]=a;
                    lst[a]=i;
                    day.erase(it);
                }
            }
        }
        if(!flag)
            printf("NO
    ");
        else{
            printf("YES
    ");
            for(int i=0;i<m;++i)
                if(ans[i]>=0)
                    printf("%d ",ans[i]);
            printf("
    ");
        }
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            solve();
        }
        return 0;
    }
    

      

  • 相关阅读:
    李超线段树 [Heoi2013]Segment
    [置顶] 九月半集训总结
    [置顶] 我想学学
    图论+前缀和 任(duty)
    模拟 飞(fly)
    入坑 可持久化线段树——主席树
    一次爆炸的联考
    HASH+平衡树 [JSOI2008]火星人prefix
    乱搞+STL平衡树 序列
    数学+图论 建造游乐场
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4885530.html
Copyright © 2011-2022 走看看