不够细心的失分--滑动窗口

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不够细心的失分--滑动窗口相关的知识,希望对你有一定的参考价值。

题目:报数游戏 == Bash博弈

关于基本的几个博弈问题,我这里给出某大佬的个人博客链接(非常详细).
各种博弈


题目:星星序列

在这里插入图片描述
OJ平台

解题思路及代码

人傻了,本来很快就写好了滑动窗口,然后看基本的样例过了也就没管了,谁知竟败在 long long 的数据范围上,本人提交的代码用的都是 int 。。。

这次比赛的基本总结:

  1. 第一次参加这种ACM类型的oi赛事,原来测试样例只会给一个(所以自测是不行的)。
  2. 提交代码后你不会知道是否通过,所以可能会被数据范围卡死几十分而不自知。。。

说回滑动窗口
滑动窗口适用范围:

  • 要求是连续的序列 && 题目中收缩窗口的界限分明

什么是滑动窗口:用 leftright 指针控制子序列的边界,将其中的元素滑入名叫 windows[] 的哈希表中,一般是根据表中元素个数的情况来进行收缩窗口判断(窗口收缩就是 left 指针右移)

#include<bits/stdc++.h>
using namespace std;
int main(){
    //基本的数据输入
    int n,k;cin >> n>>k;
    long long nums[n];
    for(int i=0;i<n;i++){
        cin >>nums[i];
    }
    //定义窗口
    unordered_map<long long,int>windows;
    //初始化左右指针
    int l = 0,r=0;
    int res = 0;
    //开始滑窗
    while(r<n){
      //加入到窗口(该死的就错在longlong的数据上。。结果分数少一半)
        long long & x = nums[r];
        windows[x]++;
        //开始收缩窗口
        while(windows[x]>k&&l<r){
            res = max(res,r-l);
            //移出窗口
            long long& s = nums[l++];
            windows[s]--;
        }
        r++;
    }
//边界处理,前面整段就是滑动窗口的基本模板,跟着代码想象左右指针滑动的感觉就行
    res = max(res,r-l);
    cout<<res;
    return 0;
}

搞完这题建议看看这个:
某大佬的滑动窗口总结

题目:大小即数量

基本只要懂得hash表的使用,都能过,可惜。。。少考虑一种情况直接0分。。。当该数值的个数比本身的数值还要少,那就只好全删了😢

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
    cin >> n;
    vector<long long>nums(n);
    unordered_map<long long,int>check;
    for(int i=0; i<n ;i++){
        cin >> nums[i];
        check[nums[i]]++;
    }
    int res = 0;
    for(auto t:check){
        if(t.second>t.first)
            res+=t.second-t.first;
        if(t.second<t.first)
            res+=t.second;
    }    
    
    cout<<res<<endl;
    return 0;
}

本次总结

不算基本失误的话,总共才AC了三道题。。。还是太菜了,其余都想当然的用dfs,结果加起来不到30分?只能说测试用例写的太狠了(菜才是事实。。。)
由于平时刷oi题少,加上没打过蓝桥杯和acm,平时刷的是leetcode,都不知道基本的比赛规则了,测试用例一直输入测试一直错。。还以为这次总分要0分了。。。但不得不说还是喜欢刷leetcode,喜欢它独特的社区氛围🤣😊

以上是关于不够细心的失分--滑动窗口的主要内容,如果未能解决你的问题,请参考以下文章

滑动时 ViewPager 更新片段

我的片段中有 webview,当滑动 webview 时, viewPager 也开始滑动

我的应用程序使用片段,但我需要从左到右从右向左滑动

在一个片段中检测Recyclerview的上下滑动,我怎么做?

95行代码极验滑动验证码?是远远不够的!大牛石锤!

选项卡执行android中下一个片段中存在的代码