洛谷题单算法1-2排序

文章展示了多个C++编程题目,涉及排序算法(如快速排序、稳定性排序)、查找(如第k小的数)、数据结构(如数组和链表)以及一些特定问题的解决方法,如选举学生会、字符串操作等,适用于IT技术的学习者和竞赛参考。
摘要由CSDN通过智能技术生成

发文章只是为了督促自己做题,双非大二刚转科班的菜菜一枚,代码仅供参考,不足之处望理解。

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;
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值