滑动窗口(预处理)+输入特殊一般化处理技巧(UVA-12174)

苦酒入喉心作痛。。
今天下午和晚上一直在等着APMCM出结果,没想到最后竟然白给了,,恨啊
我们提交的论文肯定在平均水平之上的,但竟然连百分之五十的获奖率都没进入,属实是有些离谱。
不过人生嘛,肯定是要什么都经历一下的,APMCM白给总比区域赛打铁的难受程度要轻一点吧?(狗头)
好了,回到正题。
知识点:滑动窗口(预处理)
这是一道典型的滑动窗口的问题,先通过滑动窗口对全部数据进行一下预处理并将结果存在一个数组里,并用一个变量统计当前窗口中只出现一次的变量的个数,并另开一个数组来记录当前窗口中各数字出现的次数(类似离散化记录)。然后跑一遍统计结果即可。
Hint:写此论文也是为了记录滑动窗口这个知识点,并记录一下UVA 12174这道题的代码,方便以后记忆。
下面附上代码
注意:这里还有一个小点,是滑动窗口比较容易搞错的地方,我就因为这个点第一次wa掉了,后来看了lrj的代码才恍然大悟
Hint:滑动窗口移动的时候右边进入的是不在当前窗口的第一个值,左边出去的是在当前窗口的第一个值。故在使用滑动窗口的时候可以在数组前面和后面各多加一个空白位,来方便第一个值的进入和最后一个值的离开。即要保证滑动窗口的大小是s而不是s-1。希望各位不要犯我这种低级的错误。

#include <bits/stdc++.h>
#define FOPI freopen("INPUT.TXT", "r", stdin)
#define DOPI freopen("OUTPUT.TXT", "w", stdout)
#define FOR(i, x, y) for(int i = x; i <= y; i ++)
#define ROF(i, x, y) for(int i = x; i >= y; i --)
using namespace std;
typedef long long int ll;
const int ind=0x3f3f3f3f,N=1e5+10;
int a[3*N],
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值