题意:
现在有价格为1~10^9的商品各一个,现在有m元钱,并且有n件商品(告诉你价格了)不能买。问最多可以买几件商品?
当然是挑价格小的优先买了。从价格小的开始遍历,就算m是最大的10^9,就算n=0,那么在50000次不到的时候就可以到达m,由于n不是0,那么会多枚举几个,但是也不会超过n个,所以还是足够在1s内跑出,况且如果有些商品不能买,那么后面选的商品价值就大,更加容易到达m。
要注意一个都买不到的时候,输出时如果不加判断条件,会陷入死循环。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m, p, s, cnt;
scanf("%d%d", &n, &m);
map <int, int> flag;
vector <int> a;
for (int i = 1; i <= n; i++)
{
scanf("%d", &p);
flag[p] = 1;
}
s = 0;
cnt = 0;
for (int i = 1;;i++)
{
if (flag.find(i) != flag.end()) continue;
s += i;
if (s > m) break;
a.push_back(i);
}
printf("%d\n", a.size());
if (a.size() != 0) //加判断
{
for (int i = 0; i < a.size()-1; i++) printf("%d ", a[i]);
printf("%d\n", a[a.size()-1]);
}
return 0;
}