滑动窗口,预处理(Shuffle,uva 12174)

来源:互联网 发布:sql distinct 数量 编辑:程序博客网 时间:2024/06/03 15:56

想要快速查询,可以考虑先预处理。

经典滑动窗口。

自己的debug能力太弱了,基本靠对拍,这样吃枣药丸。

多总结下debug技巧,这能力真的很重要的。


#include<bits/stdc++.h>#define maxn 100010using namespace std;int a[maxn];int tong[maxn<<1];int cnt[maxn];int CNT;int s,n;int main(){    //freopen("data.txt","r",stdin);    //freopen("wrong.txt","w",stdout);    int T;    scanf("%d",&T);    while(T--)    {        memset(tong,0,sizeof(tong));        memset(cnt,0,sizeof(cnt));        CNT=0;        scanf("%d %d",&s,&n);        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        for(int i=1-s;i<=n;i++)        {            if(CNT==0) tong[i+s]=false;            else tong[i+s]=true;            if(i>=1&&i<=n)            {                cnt[a[i]]--;                if(cnt[a[i]]==1) CNT--;            }            int k=i+s;            if(k>=1&&k<=n)            {                cnt[a[k]]++;                if(cnt[a[k]]==2) CNT++;            }        }        int ans=0;        for(int i=1-s;i<=0;i++)        {            bool ok=true;            int k=i;            while(k<=n)            {                if(k>=1-s&&tong[k+s])                {                    ok=false;                    break;                }                k+=s;            }            if(ok) ans++;        }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击