題目地址
題意
給你一個空數組,你可以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;
}