D - MEX maximizing CodeForces - 1294D思維構造

題目地址

題意

給你一個空數組,你可以q次操作查詢,每一次操作將一個數放入數組中。並輸出數組中沒有的最小數。同時有一個x,數組中的任意元素都可以對 + - x 進行任意次操作。

思路:

因爲是對x任意次數操作,所以可以想到要是否存在一個數target 這個數 可以通過 數組中的一個數進行對x的幾次操作而得來。那麼 target % x 這個數 在數組中一定是存在的。 所以我們可以儲存每次插入數對x的餘數,這個餘數對x 操作可以配湊成一些數。現在只要統計餘數的個數即可。如果當前的
target 在數組中是沒有數 可以 配湊而來的即 a[ 數組中的數 % x] = 0,那麼輸出這個數即可。

代碼

#include<cstdio>
using namespace std;
int a[400005];
int main()
{
    int n, x;
    scanf("%d %d", &n, &x);
     int t = 0;
    while(n--)
    {
        int m;
        scanf("%d", &m);
        a[m % x]++;

        while(a[t % x])
        {
            a[t % x]--;///此前的餘數構成的數已經出現。
            t++;
        }
        printf("%d\n", t);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章