发文章只是为了督促自己做题,双非大二刚转科班的菜菜一枚,代码仅供参考,不足之处望理解。
P2676 [USACO07DEC] Bookshelf
#include <iostream>
#include<algorithm>
#define ll long long
using namespace std;
bool cmp(ll a, ll b) {
return a > b;
}
ll h[20005];
int main() {
ll n = 0, b = 0, i = 0, sum = 0, cnt = 0;
cin >> n >> b;
for (i = 0; i < n; i++) {
cin >> h[i];
}
sort(h, h + n, cmp);
while (sum < b) {
sum += h[cnt];
cnt++;
}
cout << cnt << endl;
return 0;
}
P1152 欢乐的跳
#include <iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll a[1005];
ll b[1005];
bool cmp(ll a, ll b) {
return a < b;
}
int main() {
ll n = 0, flag = 0, i = 0;
cin >> n;
for (i = 0; i < n; i++) {
cin >> a[i];
}
for (i = 0; i < n; i++) {
b[i] = a[i + 1] - a[i];
b[i] = abs(b[i]);
}
sort(b, b + n - 1, cmp);
for (i = 0; i < n - 1; i++) {
if (b[i] != i + 1) {
flag = 1;
}
}
if (flag == 0)
cout << "Jolly" << endl;
else
cout << "Not jolly" << endl;
return 0;
}
P1271 【深基9.例1】选举学生会
#include <iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll a[2000005];
bool cmp(ll a, ll b) {
return a < b;
}
int main() {
ll n = 0, m = 0, i = 0;
cin >> n >> m;
for (i = 0; i < m; i++) {
cin >> a[i];
}
sort(a, a + m, cmp);
for (i = 0; i < m; i++) {
cout << a[i]<<" ";
}
return 0;
}
P1177 【模板】排序
#include <iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll a[100000005];
bool cmp(ll a, ll b) {
return a < b;
}
int main() {
ll m = 0, i = 0;
cin >> m;
for (i = 0; i < m; i++) {
cin >> a[i];
}
sort(a, a + m, cmp);
for (i = 0; i < m; i++) {
cout << a[i]<<" ";
}
return 0;
}
P1923 【深基9.例4】求第 k 小的数
#include<iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll a[5000005];
inline ll read() { //快读
char ch = getchar();
int x = 0, f = 1;
while (ch < '0' || ch>'9') {
if (ch == '-') f = -1;
ch = getchar();
}
while ('0' <= ch && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
int main() {
ll m = 0, i = 0, k = 0 ;
m = read();
k = read();
for (i = 0; i < m; i++) {
a[i] = read();
}
sort(a, a + m);
cout << a[k];
return 0;
}
P1059 [NOIP2006 普及组] 明明的随机数
#include <iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
ll a[105];
ll b[105];
int main() {
ll n = 0, i = 0, j = 0, cnt = 0;
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
for (i = 0; i < n; i++)
if (a[i] != a[i + 1])
cnt++;
cout << cnt << endl;
for (i = 0; i < n; i++) {
if (a[i] != a[i + 1]) {
b[j] = a[i];
j++;
}
}
for (i = 0; i < cnt; i++)
cout << b[i] << " ";
return 0;
}
P1093 [NOIP2007 普及组] 奖学金
#include <iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
struct student{
int num,a,b,c,sum;
};
bool cmp(student x, student y) {
if (x.sum > y.sum)
return 1;
else if (x.sum < y.sum)
return 0;
else {
if (x.a > y.a) {
return 1;
}
else if (x.a < y.a) {
return 0;
}
else {
return x.num < y.num;
}
}
}
student stu[305];
int main() {
ll n = 0, i = 0, j = 0, cnt = 0;
cin >> n;
for (i = 0; i < n; i++) {
cin >> stu[i].a >> stu[i].b >> stu[i].c;
stu[i].sum = stu[i].a + stu[i].b + stu[i].c;
stu[i].num = i + 1;
}
sort(stu, stu + n, cmp);
for (i = 0; i < 5; i++) {
cout << stu[i].num << " " << stu[i].sum << endl;
}
return 0;
}
P1781 宇宙总统
#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct person{
int num,len;
string str;
};
person per[25];
bool cmp(person x, person y) {
if (x.len > y.len)
return 1;
if (x.len == y.len && x.str > y.str)
return 1;
return 0;
}
int main() {
int n = 0, i, j;
cin >> n;
for (i = 0; i < n; i++) {
cin >> per[i].str;
per[i].num = i + 1;
per[i].len = per[i].str.length();
}
sort(per, per + n, cmp);
cout << per[0].num << endl;
cout << per[0].str << endl;
return 0;
}
P1116 车厢重组
#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[10005];
int main() {
int n, i, j, cnt = 0;
cin >> n;
for (i = 0; i < n; i++) {
cin >> a[i];
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
cnt++;
}
}
}
cout << cnt << endl;
return 0;
}
P1068 [NOIP2009 普及组] 分数线划定
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct person {
int k, s;
};
person per[5005] = { 0 };
bool cmp(person x, person y) {
if (x.s > y.s)
return 1;
if (x.s == y.s && x.k < y.k)
return 1;
return 0;
}
int main() {
int n, m, i, j, cnt = 0;
cin >> n >> m;
for (i = 0; i < n; i++) {
cin >> per[i].k >> per[i].s;
}
m = m * 1.5 - 1;
sort(per, per + n, cmp);
int t = per[m].s;
for (i = 0; i < n; i++) {
if (per[i].s >= t)
cnt++;
}
cout << t << " " << cnt << endl;
for (i = 0;; i++) {
if (per[i].s >= t)
cout << per[i].k << " " << per[i].s << endl;
else
break;
}
return 0;
}
P5143 攀爬者
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
using namespace std;
struct point {
int x, y, z;
};
point p[50005];
bool cmp(point a, point b) {
return a.z < b.z;
}
double length(point a, point b) {
return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2) + pow(a.z - b.z, 2));
}
int main() {
int n, i, j; double sum = 0.0;
cin >> n;
for (i = 0; i < n; i++) {
cin >> p[i].x >> p[i].y >> p[i].z;
}
sort(p, p + n, cmp);
for (i = 1; i < n; i++) {
double t = length(p[i - 1], p[i]);
sum += t;
}
printf("%.3lf", sum);
}
P1104 生日
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
using namespace std;
struct student {
string s; int y, m, d, id;
};
student stu[105];
bool cmp(student x, student y) {
if (x.y < y.y)
return 1;
else if (x.y > y.y)
return 0;
else {
if (x.m < y.m)
return 1;
else if (x.m > y.m)
return 0;
else {
if (x.d < y.d)
return 1;
else if (x.d > y.d)
return 0;
else {
return x.id > y.id;
}
}
}
}
int main() {
int n, i; cin >> n;
for (i = 0; i < n; i++) {
cin >> stu[i].s >> stu[i].y >> stu[i].m >> stu[i].d;
stu[i].id = i;
}
sort(stu, stu + n, cmp);
for (i = 0; i < n; i++)
cout << stu[i].s << endl;
return 0;
}
P1012 [NOIP1998 提高组] 拼数
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
}
string a[25];
int main() {
int n, i;
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, cmp);
for (i = 0; i < n; i++)
cout << a[i];
return 0;
}