题目如下:
小白兔拔萝卜
小白兔拔萝卜,但是它的力量有限,太大的萝卜它拔不动。于是它叫来了一群小伙伴……
本题就请你根据小白兔们的力量和拔出这个萝卜需要的力量,告诉小白兔,它最少需要哪些伙伴能拔出这只大萝卜。
时间限制:7000
内存限制:65536
输入
输入在第一行里给出两个不超过 1000 的正整数 n 和 T,分别是小白兔的数量和拔出这个萝卜需要的力量。随后一行给出 n 个不超过 100 的正整数,其中第 i 个数对应编号为 i 的小白兔的力量(i=1, … , n)。
输出
如果兔子们有可能拔成功,则首先在第一行输出最少需要多少只兔子才能拔出这只萝卜,然后第二行从小到大输出参与拔萝卜的兔子们的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。 如果所有兔子合力都不能拔出萝卜,则首先在第一行输出 0,随后在第二行中输出:Suan4 le ba, hai2 cha4 X. 其中 X 是小白兔们缺少的力量值。注意:力量等于 T 是可以拔出萝卜的。 解可能不是唯一的,你只要随便输出一组就可以。
样例输入
样例1:
10 100
3 25 4 91 13 81 64 38 49 51
样例2:
5 50
3 2 8 5 10
样例输出
样例1:
2
2 4
样例2:
0
Suan4 le ba, hai2 cha4 22.
我的代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int p;
int sum;
};
node a[1100];
int n,T;
int tot;
int ans[1100];
bool cmp(node x,node y){
return x.sum>y.sum;
}
int main(){
cin>>n>>T;
for(int i=1;i<=n;i++){
cin>>a[i].sum;
a[i].p=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
tot=tot+a[i].sum;
ans[i]=a[i].p;
if(tot>=T){
cout<<i<<"\n";
sort(ans+1,ans+i+1);
for(int j=1;j<i;j++){
cout<<ans[j]<<' ';
}
cout<<ans[i];
return 0;
}
}
cout<<'0'<<endl;
cout<<"Suan4 le ba, hai2 cha4 ";
cout<<T-tot;
cout<<'.';
return 0;
}
为什么不对