贪心,每次遇到一个满水的湖要下暴雨的时候,就往前找之前最后一次满水之后的第一个没有下雨的且没有被用掉天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+; 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 = ; k <= T; k++){
int n,m; scanf("%d%d",&n,&m);
memset(lastTime+,,sizeof(int)*n); s.clear(); v.clear();
bool fail = false;
for(int i = ; 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] = ;
s.insert(i);
}
}
if(fail){
puts("NO");
}else {
printf("YES"); printf("\n%d",d[v[]]);
for(int i = ; i < v.size(); i++){
printf(" %d",d[v[i]]);
}
putchar('\n');
}
}
return ;
}

UVA 1623 Enther the Dragon 神龙喝水 (贪心)的更多相关文章

  1. UVA 1623 Enter The Dragon

    题意: 一只龙,在每个不下雨的日子都可以喝干一个湖里的水,当湖满时,再向这个湖里下雨就会溢出.给出下雨的顺序,求龙喝水的序列. 分析: 记录每个湖上次满水的日子,和不下雨的日子.下雨时,查找当前湖上次 ...

  2. UVA - 1623 Enter The Dragon(贪心)

    题目: 思路: 读完题之后有了以下想法: 当遇到下雨的天,就找这个湖泊上一次下雨满了之后又一次不下雨的日期.有就在这个日期下记录被神龙喝干的湖的编号,没有就是不符合题意. 这个想法是对的,但是却被代码 ...

  3. 紫书 习题 8-23 UVa 1623 (set妙用 + 贪心)

    这道题我是从样例中看出思路了 2 4 0 0 1 1 看这组数据, 输出的是No, 为什么呢?因为两个1之间没有神龙喝水, 所以一定会有水灾. 然后就启发了我,两次同一个湖的降水之间必须至少有一次神龙 ...

  4. FZYZOJ-1569 喝水

    P1569 -- 喝水 时间限制:2000MS      内存限制:131072KB 状态:Accepted      标签:    无   无   无 Description GH的N个妹子要喝水, ...

  5. [BZOJ 3441]乌鸦喝水

    3441: 乌鸦喝水 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 148[Submit][Status][Discuss] ...

  6. Bzoj3441 乌鸦喝水

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 258  Solved: 97 Description [题目背景]     一只乌鸦在自娱自乐,它在面 ...

  7. BZOJ:3441 乌鸦喝水

    bzoj:3441 乌鸦喝水 题目传送门 Description 一只乌鸦在自娱自乐,它在面前放了n个有魔力的水缸,水缸里装有无限的水. 他准备从第1个水缸飞到第n个水缸,共m次.在飞过一个水缸的过程 ...

  8. 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏

    T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...

  9. 推荐一款健康App 多喝水,引领全民时尚喝水生活习惯

    推荐一款健康App 多喝水,引领全民时尚喝水生活习惯 1 介绍 多喝水,一款鼓励大众喝水的APP.我们倡导大众健康生活,培养人们爱喝水的习惯,让每一次喝水,都能产生价值,让人们在喝水的同时,可享受赚钱 ...

随机推荐

  1. ECMA 上传文件到SHarePoint 文档库

    <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/ ...

  2. php SHA256Hex加密

    function SHA256Hex($str){ $re=hash('sha256', $str, true); return bin2hex($re); }

  3. GFS安装

    GlusterFS 搭建 1.环境要求 IP地址 主机名称 系统 172.16.2.201 test01 Centos 6.4 172.16.2.202 test02 Centos 6.4 172.1 ...

  4. php删除文件

    unlink() 函数删除文件. 若成功,则返回 true,失败则返回 false. unlink里的参数需要文件的绝对路径

  5. PAT刷题记录

    1. 1007 素数对猜想 :运行超时 算法问题还是语言本身效率低下? import math def is_prime(num): if num == 2: return num temp = in ...

  6. css布局全总结

    一  居 中 布 局 水平居中 1. 使用inline-block+text-align(1)原理.用法 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子 ...

  7. 运行node提示:events.js:160 throw er; // Unhandled 'error' event

    运行node时遇到下述提示: events.js:160  throw er; // Unhandled 'error' event或者events.js:160       throw er; // ...

  8. STM32之CAN

    概述:STM32有3个发送邮箱,发送调度器根据优先级决定先发送那个,相当于有3个发送帧FIFO;接收方面有14个过滤器,通过编程可以从CAN的接收引脚中选择需要的报文然后分别给2个接收帧FIFO(每个 ...

  9. mysql in和exists性能比较和使用

    in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的. 如果查询的两个表大小相当,那么用i ...

  10. kindeditor 修改上传图片的路径的方法

    默认情况下kindeditor上传的图片在编辑器的根目录/attached/目录下.以日期建一个目录,然后保存文件.有些时候大概我们并不想这样.考虑到更新编辑器,或更换编辑器不太方便.比如我现在想把上 ...