UVa1623 Enter The Dragon (贪心)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa1623 Enter The Dragon (贪心)相关的知识,希望对你有一定的参考价值。
链接:http://bak2.vjudge.net/problem/UVA-1623
分析:用集合st保存当前还可以让神龙喝干湖水的日子,数组full[i]保存i号湖上次满水的日子。每当到了要往湖里下雨的日子,在集合st里查找这个湖最后一次满水的日子后第一个没被用掉不下雨的日子去喝干这个湖水,维护这个湖最后一次满水的日子,把用掉的日子从集合st里删除。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <set> 5 using namespace std; 6 7 const int maxn = 1000000 + 5; 8 9 int n, m, full[maxn], ans[maxn]; 10 set<int> st; 11 12 int main() { 13 int T; 14 scanf("%d", &T); 15 while (T--) { 16 scanf("%d%d", &n, &m); 17 memset(full, 0, sizeof(full)); 18 memset(ans, 0, sizeof(ans)); 19 st.clear(); 20 bool ok = true; 21 for (int i = 1; i <= m; i++) { 22 int t; scanf("%d", &t); 23 if (!ok) continue; 24 if (!t) st.insert(i); 25 else { 26 ans[i] = -1; 27 set<int>::iterator it = st.upper_bound(full[t]); 28 if (it == st.end()) ok = false; 29 else { 30 ans[*it] = t; 31 full[t] = i; 32 st.erase(*it); 33 } 34 } 35 } 36 if (!ok) printf("NO\n"); 37 else { 38 printf("YES"); 39 bool first = true; 40 for (int i = 1; i <= m; i++) 41 if (ans[i] >= 0) printf("%c%d", first?(first = false, ‘\n‘) : ‘ ‘, ans[i]); 42 printf("\n"); 43 } 44 } 45 return 0; 46 }
以上是关于UVa1623 Enter The Dragon (贪心)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 101487E - Enter The Dragon