再碰到这种数学题 就是多想多想 一定要自己写一写 模拟一下过程有助于理解
思路:这里可以想到的是+,- x都与%x是一个意思,我们让ans=0,是一开始的初始条件因为一开始数列是没有的嘛,然后用map来存放y%x这个值的个数,之后再用ans%x的值来查询(因为ans肯定是从0一步步递增起来的)这个值是否当前的数列中存在(只要余数相同经过多次加减操作最后就可以得到这个数),存在我们就把ans+1输出,否则ans就是答案,ans+1之后别忘了把这个剩余系给减掉一个(因为已经用去了一个数)
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
// 想到了是跟%有关系但没有完成
using namespace std;
typedef long long ll;
map<int,int>mp;
int main()
{
int q,x;
cin>>q>>x;
int ans = 0;
int y;
while(q--)
{
cin>>y;
mp[y%x]++;
while(mp[ans%x] >= 1)
{
mp[ans%x]--;
ans++;
}
cout<<ans<<endl;
}
return 0;
}