Smallest Sub-Array

Smallest Sub-Array

代码

#include<iostream>
#include<string.h>
using namespace std;
const int MAXN = 1e6 + 7;
#define min(a,b) (a)<(b)?(a):(b)
int a[MAXN];
int book[MAXN];
int t;
int m, n, k;
void build()
{
    a[1] = 1;
    a[2] = 2;
    a[3] = 3;
    for (int i = 4; i <= n; i++)
        a[i] = (a[i - 1] + a[i - 2] + a[i - 3]) % m + 1;
}
int main()
{
    int z=0;
    cin >> t;
    while (t--)
    {
        cin >> n >> m >> k;
        build();
        int l = 1, r = 1, res = 0;
        int ans = MAXN;
        memset(book, 0, sizeof(book));
        while (r <=n)
        {
            int c = a[r++];
            book[c]++;
            if (c <= k && book[c] == 1)res++;
            while (l < r && res == k)
            {
                ans = min(ans, r - l);
                c = a[l++];
                book[c]--;
                if (c <= k && book[c] == 0)res--;
            }
        }
        z++;
        if (ans <= n)cout << "Case" << " " << z << ":" << " " << ans << endl;
        else cout << "Case" << " " << z << ":" <<" "<< "sequence nai" << endl;
    }
    return 0;
}
posted @ 2022-02-13 21:38  Lewis_1231  阅读(25)  评论(0)    收藏  举报