小白兔拔萝卜

一、编程题(共4题,共100分)

1.    小白兔拔萝卜

小白兔拔萝卜,但是它的力量有限,太大的萝卜它拔不动。于是它叫来了一群小伙伴……

本题就请你根据小白兔们的力量和拔出这个萝卜需要的力量,告诉小白兔,它最少需要哪些伙伴能拔出这只大萝卜。

时间限制: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.

试题编号:20241207-5-01

试题类型:编程题

标准答案:

试题难度:一般

试题解析:

展示地址:点击浏览

考生答案:(此题已作答)

考生得分:0

是否评分:已评分

评价描述:

代码;#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,T,temp,sum=0;
    cin>>n>>T;
    int ans[n+1][2];
    map<int,int> r2;
    map<int,int>::reverse_iterator it;
    for(int i=1;i<=n;i++){
        cin>>temp;    
        r2[temp]=i;
    }
    for(it=r2.rbegin();it!=r2.rend();it++){
        if(sum>T){
            break;
        }
        sum+=it->first;
    }
    it--;
    cout<<it->second<<"->"<<it->first;
    
    /*int i;
    for(i=1;i<=n;i++){
        if(sum>=T){
            break;
        }
        sum+=ans[i][0];
    }
    i--;
    /*int ans1[i+1][2];
    for(int j=1;j<=i;j++){
        printf("编号:%d->力量:%d\n",ans[j][1],ans[j][0]);
        ans1[j][0]=ans[j][0];
        ans1[j][1]=ans[j][1];
    }
    for(int k=1;k<=n;k++){
        for(int j=1;j<=i-k;j++){
            if(ans1[j][0]<ans1[j+1][0]){
                temp=ans[j][0];
                ans1[j][0]=ans1[j+1][0];
                ans1[j+1][0]=temp;
                swap(ans1[j][1],ans1[j+1][1]);
                
            }
        }
    }
    cout<<i<<endl;
    for(int j=1;j<=i;j++){
        cout<<ans1[j][1]<<" ";    
    }*/
    /*return 0;
}

#include<bits/stdc++.h>
using namespace std;
bool mySort1(pair<int,int>&a,pair<int,int>&b){
    return a.first>b.first;
}
int main()
{
    /*vector<int>v1;
    
    srand(time(0));
    for(int i=1;i<=100;i++){
        v1.push_back(rand()%(101) + 100);
    } 
    for(int i=1;i<v1.size();i++){
        cout<<v1[i]<<" ";
    }*/
    /*pair<int,int>p1;
    p1={1,2};
    cout<<p1.first<<"->"<<p1.second;*/
/*    int n,T,temp,sum=0;
    vector<pair<int,int>>rabbits;
    set<int>bh;//保存满足力量的编号 
    cin>>n>>T;
    for(int i=1;i<=n;i++){
        cin>>temp;
        rabbits.push_back({temp,i}) ;
    }
    sort(rabbits.begin(),rabbits.end(),mySort1);
    for(int i=0;i<n;i++){
        cout<<rabbits[i].first<<"->"<<rabbits[i].second<<endl;
    }
    //贪心便利每次取最大值 
    temp=0;
    for(int i=0;i<n;i++){
        if(sum>=T){
            break;
        }
        sum=sum+rabbits[i].first;
        bh.insert(rabbits[i].second); 
        temp++;
    } 
    if(sum<T){
        cout<<0<<endl;
        cout<<"Suan4 le ba,hai2 cha4 X.";
    }
    else{
        cout<<temp<<endl;

    for(set<int>::iterator it=bh.begin();it!=bh.end();it++){
            cout<<*it<<" ";
        }
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值