题目链接:http://codeforces.com/problemset/problem/659/C
题意:
n是已经有的数字,m是可用的最大数字和
要求选自己没有的数字,且这些数字的数字和不能超过m
且要求可选的数字的数目越多越好
输出一种答案即可
解题思路:
刚开始想开一个bool型的1e9的数组,然后判断即可
可是交上去发现内存超限
后来把1e9的数组改成2*1e6的数组即可
具体原因应该从数学数字和方面考虑
具体代码如下:
#include<bits/stdc++.h> using namespace std; bool a[200006]; int main() { int n,m,t; scanf("%d %d",&n,&m); for(int i=0;i<n;i++) { cin>>t; if(t>200000) continue; a[t]=1; } int kind=0; int i; for(i=1;i<=200000;i++) { if(m<i) break; if(a[i]==0) { m-=i; kind++; } } printf("%d ",kind); for(int j=1;j<i;j++) { if(!a[j]) printf("%d ",j); } printf(" "); return 0; }