买东西
题目描述
有n本书在甩卖,有些书的价格是负值,如果买到负值的书,就会获得相应的钱(绝对值),但最多可以买m本,求最多能赚多少钱。
输入格式
第一行输入两个整数n,m用空格隔开(1<=m<=n<=100),表示书的本数和最多能买m本
接下来的n行。每行一个整数ai(-1000<=ai<=1000)表示书的价格
输出格式
输出能赚多少钱。
样例输入
5 3
-6 0 35 -2 4
样例输出
8
#include <iostream>
#include <algorithm>
using namespace std;
const int Max=100+5;
int a[Max];
int main()
{
int n,m; int ans=0;
cin>>n>>m;
for (int i=1;i<=n;i++)
cin>>a[i];
sort (a+1,a+n+1);
for (int i=1;i<=m;i++)
{
if (a[i]>0) break;
ans-=a[i];
}
cout<<ans;
return 0;
}
巧克力豆
题目描述
39考试取得了好成绩,妈妈奖励他一罐巧克力豆,39现在有好多巧克力豆,于是他打算吃掉它们。突然,他冒出了一个想法,我能不能将这些巧克力豆按从大到小的顺序来吃?
Unfortunately,39的巧克力豆太多了,而且是混乱放在一起的,39觉得给巧克力豆排序实在是太麻烦了,所以请你来帮39把巧克力豆排好序。
输入格式
第一行是一个整数n,表示有n颗巧克力豆。
第二行n个整数,表示每个巧克力豆的大小。
输出格式
输出一行,n个整数。表示排好序的巧克力豆的大小(从大到小)。
样例输入
6
3 9 4 6 5 1
样例输出
9 6 5 4 3 1
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
const int Max=1000000+5;
int a[Max];
int main()
{
int n; cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i];
sort (a+1,a+n+1,cmp);
for (int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
成绩单
题目描述
现在你得到了一份高考成绩单,你需要处理这份成绩单,使得他按照语文成绩为第一关键字降序,数学成绩为第二关键字降序,外语成绩为第三关键字降序,物理成绩为第四关键字降序,化学成绩为第五关键字降序,生物成绩为第六关键字降序,学号为为第七关键字升序排序。
输入格式
一个整数n,表示总人数接下来一共有n行,每行7个整数,分别是学号、语文、数学、外语、物理、化学和生物。输入数据按照学号升序排序
输出格式
共n行,每行7个整数,表示排序好的结果,按照学号、语文、数学、外语、物理、化学和生物的顺序输出。
样例输入
3
1 10 10 10 10 12 10
2 60 59 58 61 63 70
3 98 99 78 87 65 100
样例输出
3 98 99 78 87 65 100
2 60 59 58 61 63 70
1 10 10 10 10 12 10
原版做法:
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int g,a,b,c,d,e,f;
};
bool cmp(node a,node b)
{
if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d&&a.e==b.e&&a.f==b.f)
return a.g<b.g;
if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d&&a.e==b.e)
return a.f>b.f;
if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d)
return a.e>b.e;
if (a.a==b.a&&a.b==b.b&&a.c==b.c)
return a.d>b.d;
if (a.a==b.a&&a.b==b.b)
return a.c>b.c;
if (a.a==b.a)
return a.b>b.b;
return a.a>b.a;
}
const int Max=50000+5;
node a[Max];
int main()
{
int n; cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i].g>>a[i].a>>a[i].b>>a[i].c>>a[i].d>>a[i].e>>a[i].f;
sort (a+1,a+n+1,cmp);
for (int i=1;i<=n;i++)
cout<<a[i].g<<" "<<a[i].a<<" "<<a[i].b<<" "<<a[i].c<<" "<<a[i].d<<" "<<a[i].e<<" "<<a[i].f<<endl;
return 0;
}
改进:
#include <iostream>
#include <algorithm>
using namespace std;
const int Max=50010;
struct stu
{
int id,chi,mat,eng,phy,che,blo;
};
stu a[Max];
bool cmp(stu x,stu y)
{
if (x.chi!=y.chi)
return x.chi>y.chi;
if (x.mat!=y.mat)
return x.mat>y.mat;
if (x.eng!=y.eng)
return x.eng>y.eng;
if (x.phy!=y.phy)
return x.phy>y.phy;
if (x.che!=y.che)
return x.che>y.che;
if (x.blo!=y.blo)
return x.blo>y.blo;
return x.id<y.id;
}
int main()
{
int n;
cin>>n;
for (int i=0;i<n;i++)
cin>>a[i].id>>a[i].chi>>a[i].mat>>a[i].eng
>>a[i].phy>>a[i].che>>a[i].blo;
sort(a,a+n,cmp);
for (int i=0;i<n;i++)
cout<<a[i].id<<" "<<a[i].chi<<" "<<a[i].mat<<" "<<a[i].eng
<<" "<<a[i].phy<<" "<<a[i].che<<" "<<a[i].blo<<endl;
return 0;
}