Enter The Dragon UVA - 1623

本文探讨了一种算法策略,用于解决在连续的降雨天中,神龙如何选择喝水的湖来避免水灾的问题。通过使用贪心算法结合set集合的数据结构,实现了高效的时间复杂度优化。

题意:n个湖,每个湖都装满了水。不久的将来会有暴雨,在接下来的m天内,每天要么不下雨,要么恰好忘一个湖里下暴雨。如果这个湖里已经装满了水,将会引发水灾。没了避免水灾,神龙可以在每个不下雨的天里喝干一个湖的水(也可以不喝)。如果以后再往这个干枯的湖里下暴雨,湖会重新被填满,但不会引发水灾。神龙应当如何喝水才能避免水灾?n<=1e6,.<=1e6

思路:贪心,因为要优化时间复杂度,所以用set集合,本身有序,且可以二分查找。如果某天湖下雨,那么查找它上一次满候是否有不下雨的天让神龙喝水

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);
const int maxn = 1e6 + 2;
set<int> day;
int n,m,x,ans[maxn],full[maxn];
int main()
{
    int T; scanf("%d",&T);
    while(T--)
    {
        day.clear();
        bool sign = true;
        scanf("%d%d",&n,&m);
        memset(ans,0,sizeof(ans));
        memset(full,0,sizeof(full));
        for(int i = 0;i < m;i++)
        {
            scanf("%d",&x);
            if(!sign) continue;
            if(!x) day.insert(i);//没下雨,闲置天数+1
            else
            {
                ans[i] = -1;
                set<int>::iterator it = day.lower_bound(full[x]);
                if(it == day.end()) sign = false;
                else
                {
                    ans[*it] = x;
                    full[x] = i;
                    day.erase(*it);
                }
            }
        }
        if(!sign) printf("NO\n");
        else
        {
            bool fir = false;
            printf("YES\n");
            for(int i = 0;i < m;i++)
            {
                if(ans[i] >= 0)
                {
                    if(!fir)
                    {
                        printf("%d",ans[i]);
                        fir = true;
                    }
                    else printf(" %d",ans[i]);
                }
            }
            printf("\n");
        }
    }
    return 0;
}

 

在 Vue 中使用 `v-enter-active` 和 `v-leave-active` 时,如果动画无效,可能与以下几个原因有关: 1. **过渡包裹组件的使用**:确保 `v-enter-active` 和 `v-leave-active` 是用在 `<transition>` 或 `<transition-group>` 组件内部的元素上。只有在这些过渡组件内,Vue 才会识别并应用这些类名。如果直接将其应用于非过渡组件中的元素,将无法生效。 2. **CSS 动画定义**:检查是否为 `v-enter-active` 和 `v-leave-active` 类名正确地定义了 CSS 动画。例如,需要通过 `animation` 或 `transition` 属性来指定动画效果。例如: ```css .v-enter-active { animation: fadeIn 0.5s ease; } .v-leave-active { animation: fadeOut 0.5s ease; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } ``` 3. **动态组件或条件渲染**:`v-enter-active` 和 `v-leave-active` 在组件动态切换(例如使用 `component is`)或者条件渲染(如 `v-if`)时特别有用。确保被包裹的组件确实经历了创建和销毁的过程,而不是仅仅更新了状态。例如: ```vue <transition name="v"> <component :is="currentComponent" v-if="currentComponent" /> </transition> ``` 4. **过渡模式**:如果使用的是 `<transition>` 组件,可以尝试通过 `mode` 属性指定过渡模式,例如 `in-out` 或 `out-in`,以控制进入和离开动画的顺序。例如: ```vue <transition name="v" mode="in-out"> <component :is="currentComponent" v-if="currentComponent" /> </transition> ``` 5. **Vue 版本兼容性**:不同版本的 Vue 对动画的支持可能略有差异。确保使用的 Vue 版本支持 `v-enter-active` 和 `v-leave-active` 的用法,并查阅官方文档以获取最新的动画指南。 6. **第三方库冲突**:如果使用了其他动画库(如 Animate.css),请确保其与 Vue 的过渡系统兼容,并正确地应用了类名。 通过上述方法逐一排查,可以有效解决 `v-enter-active` 和 `v-leave-active` 无效的问题。如果问题依然存在,建议检查浏览器的开发者工具,确认类名是否被正确应用以及是否有 CSS 冲突。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值