zoukankan      html  css  js  c++  java
  • UVA 1623 Enther the Dragon 神龙喝水 (贪心)

    贪心,每次遇到一个满水的湖要下暴雨的时候,就往前找之前最后一次满水之后的第一个没有下雨的且没有被用掉天day1。

    因为如果不选这day1,那么之后的湖不一定能选上这一天。如果这一天后面还有没有下雨的天day2的话,选后面的,会使得day1到day2之间满水的湖选择减少。

    #include<bits/stdc++.h>
    #define PB push_back
    #define MP make_pair
    #define fi first
    #define second
    #define FOR(i,s,e) for(int i = s; i < e; i++)
    using namespace std;
    
    const int maxn = 1e6+5;
    
    int lastTime[maxn];
    
    int drink[maxn];
    set<int> unUsedNoRainDays;
    vector<int> NoRainDays;
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        set<int> &s = unUsedNoRainDays;
        vector<int> &v = NoRainDays;
        int *d = drink;
        int *lT = lastTime;
        int T; scanf("%d",&T);
        for(int k = 1; k <= T; k++){
            int n,m; scanf("%d%d",&n,&m);
            memset(lastTime+1,0,sizeof(int)*n);
    
            s.clear(); v.clear();
            bool fail = false;
            for(int i = 1; i <= m; i++) {
                int t;
                scanf("%d",&t);
                if(t){
                    set<int>::iterator it = s.lower_bound(lT[t]);
                    if(it != s.end()){
                        d[*it] = t;
                        lT[t] = i;
                        s.erase(it);
                    }else {
                        for(; i < m; i++) scanf("%d",&t);
                        fail = true;
                    }
                }else {
                    v.PB(i);
                    d[i] = 0;
                    s.insert(i);
                }
            }
            if(fail){
                puts("NO");
            }else {
                printf("YES"); printf("
    %d",d[v[0]]);
                for(int i = 1; i < v.size(); i++){
                    printf(" %d",d[v[i]]);
                }
                putchar('
    ');
            }
        }
        return 0;
    }
  • 相关阅读:
    组合总和
    子集Ⅱ
    子集
    全排列Ⅱ
    全排列
    填充下一个结点下一个Next结点
    把二叉树转化成累加树
    二叉树的左叶子之和
    高速C/C++编译工具ccache
    【转载】如何用U盘制作Ubuntu启动盘
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4719710.html
Copyright © 2011-2022 走看看