C40-11.16 排序综合
原题链接:38471.note12025-11-16 18:06:51
发布于:江苏
一、选手排序
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
struct node{
int sc, id;
}a[N];
int n, l, r, cnt;
bool cmp(node x, node y){
if (x.sc != y.sc) return x.sc > y.sc;
return x.id < y.id;
}
int main() {
cin >> n >> l >> r;
for (int i=1; i<=n; i++){
cin>>a[i].sc;
a[i].id = i;
if (l<=a[i].sc && a[i].sc<=r) cnt++;
}
sort (a+1, a+1+n, cmp);
cout<<cnt<<endl;
for (int i=1; i<=n; i++){
if (l<=a[i].sc && a[i].sc<=r)
cout << a[i].id << ' ';
}
return 0;
}
/*
输入格式
第一行三个整数 n, L ,R( 1 ≤ n ≤ 10^5),( 0 ≤ L ≤ R ≤ 1000 );
第二行 n 个整数( s ),表示每位选手的得分。
输出格式
第一行输出一个整数 m ,表示满足条件的选手数量;
第二行输出 m 个整数,表示排序后的选手编号(按 ([L,R]) 内得分降序排列)。
样例组
输入#1
8 60 90
70 85 55 90 60 75 90 80
输出#1
7
4 7 2 8 6 1 5
*/
二、购物
#include<bits/stdc++.h>
using namespace std;
struct node{
int p, id;
}a[100005];
int n, m;
bool cmp(node x, node y){
if (x.p != y.p){
return x.p < y.p;
}
return x.id < y.id;
}
int main() {
cin >> n >> m;
for (int i=1; i<=n; i++){
cin>>a[i].p;
a[i].id = i;
}
sort (a+1, a+1+n, cmp);
for (int i=1; i<=n; i++){
if (a[i].p <= m){
m -= a[i].p;
}
else{
cout << i-1;
return 0;
}
}
return 0;
}
/*
题目描述
快过年了,小k的妈妈又要开始带着他买买买了。
小k虽然极其不愿意,但因为 (打不过) 孝顺妈妈,还是跟着去了。
已知商场有 N 件商品,小k的妈妈带了 M 元钱,
每一件商品有一个编号 id 和价格 v 。
小k妈妈买东西的原则是先买价格便宜的商品,价格相同买编号靠前的。
小k想知道:妈妈手里的钱最多能买几件商品?
因为这关系到他什么时候可以回家。
输入格式
第一行输入两个整数 N,M
(1<=N <=100 000,1<=M<=1000 000 000) 。
第二行输入 N 个整数,
依次表示每件商品的价格 v(1<=v<=10000)。
(商品的 id 按照输入顺序从小到大编号)。
输出格式
一个整数,表示最多能买几件商品。
样例组
输入#1
5 10
5 4 2 3 2
输出#1
3
*/
作业提示
字符串排序规则自定义
bool cmp(string x, string y){
if (x.size() == y.size()) return x<y;
return x.size() < y.size();
}
这里空空如也










有帮助,赞一个