Description
Now you are asked to measure a dose of medicine with a balance and a number of weights. Certainly it is not always achievable. So you should find out the qualities which cannot be measured from the range [1,S]. S is the total quality of all the weights.
Input
The input consists of multiple test cases, and each case begins with a single positive integer N (1<=N<=100) on a line by itself indicating the number of weights you have. Followed by N integers Ai (1<=i<=N), indicating the quality of each weight where 1<=Ai<=100.
Output
For each input set, you should first print a line specifying the number of qualities which cannot be measured. Then print another line which consists all the irrealizable qualities if the number is not zero.
Sample Input
3
1 2 4
3
9 2 1
Sample Output
0
2
4 5
代码:
#include<bits/stdc++.h>
using namespace std;
vector<int>vi;
int s[10005];
int t,n,x,sum;
int main(){
while(~scanf("%d",&n)){
sum=0;
memset(s,0,sizeof(s));
for(int i=0;i<n;i++){
scanf("%d",&x);
sum+=x;
int w=vi.size();
if(s[x]==0){
vi.push_back(x);
s[x]++;
}
for(int y=0;y<w;y++){
int a=abs(vi[y]+x);
int b=abs(vi[y]-x);
if(s[a]==0&&a>0)vi.push_back(a),s[a]++;
if(s[b]==0&&b>0)vi.push_back(b),s[b]++;
}
}
int num=vi.size();
printf("%d\n",sum-num);
int w=1;
for(int i=1;i<=sum;i++){
if(s[i]==0){
if(w<sum-num){
printf("%d ",i);
}
else if(w==sum-num){
printf("%d\n",i);
}
w++;
}
}
vi.clear();
}
}