小码王信奥 C++4.1 L2 - U5
2026-01-16 22:22:56
发布于:重庆
邀请码:TipJ,TLE求调大买特买
时间限制:1000ms
内存限制:128MB
快过年了,小 k 的妈妈要开始带着他买买买了,准备年货了。
已知商场有 N 件商品,小 k 的妈妈带了 M 元钱,每一件商品有一个编号 id 和价格v 。小 k 的妈妈买东西的原则是先买价格便宜的商品,价格相同买编号较大的。
小 k 想知道:妈妈手里的钱最多能买哪几件商品?因为这关系到他什么时候可以回家,所以他想帮妈妈快速定位这些商品。
输入格式
第一行输入两个整数 N,M ,分别表示商品数量和妈妈带的钱。
第二行输入 N 个整数,依次表示每件商品的价格 v,商品的 id 按照输入顺序从 1 到 n 编号。
输出格式
输出多行,表示能买商品的编号是什么,每个商品编号占一行。
样例组
输入#1
复制
5 10
5 4 2 3 2
输出#1
复制
5
3
4
提示说明
【样例 1 解释】
妈妈会先买便宜的,价格相同买编号大的,所以会先买第五个,编号是 5 ,然后买第三个,编号是 3 ,接着会买第四个,编号是 4。
#include<bits/stdc++.h>
using namespace std;
struct noode{
long long id,jg;
};
struct noode a[100005];
int main(){
long long n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
a[i].id=i;
cin>>a[i].jg;
}
int temp=n;
// sort(a+1,a+1+n,[](const noode &x,const noode &y){return x.jg<=y.jg;});
// for(int i=1;i<=n;i++)
// {
//
// for(int j=1;j<=temp-1;j++)
// {
// if(a[j].jg>=a[j+1].jg)
// {
// swap(a[j],a[j+1]);
// }
// }
// temp--;
// }
int i=1;
while(temp)
{
if(i+1<=temp)
{
if(a[i].jg>=a[i+1].jg)
{
swap(a[i],a[i+1]);
i++;
}
else
{
i++;
}
}
else
{
temp--;
i=1;
}
}
i=1;
while(m>=a[i].jg&&i<=n)
{
m-=a[i].jg;
cout<<a[i].id<<endl;
i++;
}
return 0;
}
这里空空如也









有帮助,赞一个