当前位置: 首页 > news >正文

洛谷【排序】算法的题单 - 笔记

2024-12-09 - 第 37 篇
洛谷【排序】题单 - 笔记
作者(Author): 郑龙浩 / 仟濹(CSND账号名)

洛谷【排序】题单合集

一、排序算法都有…

1. 简单排序算法

这些算法通常是基础的排序方法,容易理解和实现,但效率较低,适用于数据量较小的情况。

  • 冒泡排序 (Bubble Sort)
    时间复杂度:O(n²)
    空间复杂度:O(1)
    特点:重复地交换相邻的元素,直到整个序列有序。
  • 选择排序 (Selection Sort)
    时间复杂度:O(n²)
    空间复杂度:O(1)
    特点:每次选择最小的元素放到已排序部分的末尾。
  • 插入排序 (Insertion Sort)
    时间复杂度:O(n²)
    空间复杂度:O(1)
    特点:将未排序部分的元素插入到已排序部分的合适位置。

2. 分治排序算法

这些算法通过将大问题分解成小问题来解决,通常效率较高。

  • 归并排序 (Merge Sort)
    时间复杂度:O(n log n)
    空间复杂度:O(n)
    特点:通过递归分解数组并合并已经排序的子数组。
  • 快速排序 (Quick Sort)
    时间复杂度:O(n log n)(平均情况),O(n²)(最坏情况)
    空间复杂度:O(log n)(递归栈空间)
    特点:通过选择一个"基准"元素并将数组分割为小于基准和大于基准的部分,递归地排序。
  • 堆排序 (Heap Sort)
    时间复杂度:O(n log n)
    空间复杂度:O(1)
    特点:通过构建最大堆或最小堆来排序元素。

3. 线性时间排序算法

这些算法的时间复杂度是 O(n),适用于特定类型的数据。

  • 计数排序 (Counting Sort)
    时间复杂度:O(n + k)
    空间复杂度:O(k)
    特点:通过统计数组中每个元素的出现次数,适用于元素范围较小的情况。
  • 桶排序 (Bucket Sort)
    时间复杂度:O(n + k)(最理想情况)
    空间复杂度:O(n)
    特点:将元素分配到不同的桶中,然后分别排序桶内的元素。
  • 基数排序 (Radix Sort)
    时间复杂度:O(nk)
    空间复杂度:O(n + k)
    特点:按位(从低位到高位)进行排序,适用于整数或字符串排序。

4. 非比较排序算法

这些排序算法通过特定方式排序,不依赖于元素的比较,因此能在某些特定情况下达到线性时间复杂度。

  • 计数排序桶排序基数排序 都属于非比较排序,它们利用额外的信息(例如元素的计数、元素分布或位数)来直接排定顺序。

5. 其他排序算法

  • 希尔排序 (Shell Sort)
    时间复杂度:O(n log n)(最优情况),O(n²)(最坏情况)
    空间复杂度:O(1)
    特点:是插入排序的一种改进,采用了分组插入排序,逐步减少间隔来进行排序。
  • 双向冒泡排序 (Cocktail Shaker Sort)
    时间复杂度:O(n²)
    空间复杂度:O(1)
    特点:是冒泡排序的变种,优化了冒泡过程,双向交替进行排序。

总结:排序算法的分类与选择

  • 简单排序(冒泡、选择、插入排序)适用于数据量较小的场景。
  • 分治算法(快速、归并、堆排序)是更高效的排序方法,适用于数据量较大的情况。
  • 线性时间排序(计数、桶、基数排序)适用于特定场景,尤其是在数据范围已知的情况下。

不同的排序算法有不同的应用场景和优缺点,选择排序算法时要考虑输入数据的特点和所需的性能要求。

二、洛谷算法题合集 (基本上都是使用的 sort 函数)

题目顺序 由简到难

1. P2676 [USACO07DEC] Bookshelf B

难度【入门】

题目描述

Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。

所有 N ( 1 ≤ N ≤ 20 , 000 ) N(1 \le N \le 20,000) N(1N20,000) 头奶牛都有一个确定的身高 H i ( 1 ≤ H i ≤ 10 , 000 ) H_i(1 \le H_i \le 10,000) Hi(1Hi10,000)。设所有奶牛身高的和为S。书架的高度为 B B B,并且保证 1 ≤ B ≤ S < 2 , 000 , 000 , 007 1 \le B \le S < 2,000,000,007 1BS<2,000,000,007

为了够到比最高的那头奶牛还要高的书架顶,奶牛们不得不像演杂技一般,一头站在另一头的背上,叠成一座“奶牛塔”。当然,这个塔的高度,就是塔中所有奶牛的身高之和。为了往书架顶上放东西,所有奶牛的身高和必须不小于书架的高度。

显然,塔中的奶牛数目越多,整座塔就越不稳定,于是奶牛们希望在能够到书架顶的前提下,让塔中奶牛的数目尽量少。 现在,奶牛们找到了你,希望你帮她们计算这个最小的数目。

输入格式
  • 1 1 1 行: 2 个用空格隔开的整数: N N N B B B
  • 2 … N + 1 2\dots N+1 2N+1 行: 第 i + 1 i+1 i+1 行是 1 1 1 个整数: H i H_i Hi
输出格式
  • 1 1 1 行: 输出 1 1 1 个整数,即最少要多少头奶牛叠成塔,才能够到书架顶部
样例 #1
样例输入 #1
6 40
6
18
11
13
19
11
样例输出 #1
3

提示

输入说明:

一共有 6 6 6 头奶牛,书架的高度为 40 40 40,奶牛们的身高在 6 … 19 6\dots19 619之间。

输出说明:

一种只用 3 3 3 头奶牛就达到高度 40 40 40 的方法: 18 + 11 + 13 18+11+13 18+11+13。当然还有其他方法,在此不一一列出了。

本题代码:

// P2676-Bookshelf_B
// 使用 sort 函数,快速排序
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
bool cmp( int a, int b ){return a > b;
}
int main( void ){int num, shelf_height; // 奶牛数量,书架高度vector<int> cows_height; // 奶牛高度int sum = 0; // 叠罗汉的奶牛数量cin >> num >> shelf_height;for( int i = 0; i < num; i++ ){int temp;cin >> temp;cows_height.push_back( temp );}sort( cows_height.begin(), cows_height.end(), cmp ); // sort 默认升序,所以可以写一个cmp函数来实现降序for( int i = 0; i < cows_height.size(); i++ ){sum += cows_height[i];if( sum >= shelf_height ){cout << i + 1;break;}}return 0;
}

2.P1152欢乐的跳

难度【入门】

题目描述

一个 n n n 个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了 [ 1 , n − 1 ] [1,n-1] [1,n1] 之间的所有整数,则称之符合“欢乐的跳”,如数组 { 1 , 4 , 2 , 3 } \{1,4,2,3\} {1,4,2,3} 符合“欢乐的跳”,因为差的绝对值分别为: 3 , 2 , 1 3,2,1 3,2,1

给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。

输入格式

每组测试数据第一行以一个整数 n ( 1 ≤ n ≤ 1000 ) n(1 \le n \le 1000) n(1n1000) 开始,接下来 n n n 个空格隔开的在 [ − 1 0 8 , 1 0 8 ] [-10^8,10^8] [108,108] 之间的整数。

输出格式

对于每组测试数据,输出一行若该数组符合“欢乐的跳”则输出 Jolly,否则输出 Not jolly

样例 #1
样例输入 #1
4 1 4 2 3
样例输出 #1
Jolly
样例 #2
样例输入 #2
5 1 4 2 -1 6
样例输出 #2
Not jolly
提示

1 ≤ n ≤ 1000 1 \le n \le 1000 1n1000

本题代码:

// 洛谷P1152 欢乐的跳
// 思路:
// 1. 输入数据
// 2. 将相邻两个元素的差值的绝对值存入第二个数组 arr2中
// 3. 将 arr2 差值的绝对值组成的数组 --> 从大到小排序
// 3. 只需比较最大的元素,如果最大的元素 范围在[1, n-1],而是 “欢乐的跳”, 否则不是“欢乐的跳”
// 3. 条件:数组宽度 1 <= n <= 1000
// 4. 条件:数组元素 -10^8 <= arr[ i ] <= 10^8
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool compare( long long a, long long b ){return a > b;
}
int main( void ){vector <long long> arr; // 存储元素vector <long long> arr2;int n; // 数组宽度cin >> n;// 输入数据for( int i = 0; i < n; i++ ){int temp;cin >> temp;arr.push_back( temp );}// 计算相邻两个元素的差值的绝对值for( int i = 0; i < n - 1; i++ ){arr2.push_back( abs( arr[ i ] - arr[ i + 1 ] ) );}// 排序sort( arr2.begin(), arr2.end(), compare );// 比较if( arr2[ 0 ] >= 1 && arr2[ 0 ] <= n - 1 ){cout << "Jolly" << endl;}else{cout << "Not jolly" << endl;}return 0;
}

3.【深基9.例1】选举学生会

难度【普及-】

题目描述

学校正在选举学生会成员,有 n n n n ≤ 999 n\le 999 n999)名候选人,每名候选人编号分别从 1 1 1 n n n,现在收集到了 m m m m ≤ 2000000 m \le 2000000 m2000000)张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。

输入格式

输入 n n n m m m 以及 m m m 个选票上的数字。

输出格式

求出排序后的选票编号。

样例 #1
样例输入 #1
5 10
2 5 2 2 5 2 2 2 1 2
样例输出 #1
1 2 2 2 2 2 2 2 5 5

本题代码:

// 洛谷 P1270 选举学生会
// 思路: 正常排序,没什么特殊的
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main( void ){int num, m; // 人员编号 人数vector<int> arr;cin >> num >> m; // 输入界限// 输入数据for( int i = 0; i < m; i++ ){int temp;cin >> temp;arr.push_back( temp );}// 排序sort( arr.begin(), arr.end() ); // 默认升序排序即可for( int i = 0; i < m; i++ ){cout << arr.at( i ) << " ";}return 0;
}

4.【模板】排序

难度【普及-】

题目描述

将读入的 N N N 个数从小到大排序后输出。

输入格式

第一行为一个正整数 N N N

第二行包含 N N N 个空格隔开的正整数 a i a_i ai,为你需要进行排序的数。

输出格式

将给定的 N N N 个数从小到大输出,数之间空格隔开,行末换行且无空格。

样例 #1
样例输入 #1
5
4 2 4 5 1
样例输出 #1
1 2 4 4 5
提示

对于 20 % 20\% 20% 的数据,有 1 ≤ N ≤ 1 0 3 1 \leq N \leq 10^3 1N103

对于 100 % 100\% 100% 的数据,有 1 ≤ N ≤ 1 0 5 1 \leq N \leq 10^5 1N105 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1ai109

本题代码:

// 洛谷P11177 【模板】排序
// 排序依然是正常排序,需要注意的是细节:【输出格式】行末换行且无空格 --> 这句话意味着需要进行“特判”,行末无空格,而是\n
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main ( void ){int num; // 限制长度vector <int> arr; // 存储数据cin >> num; // 输入数据for( int i = 0; i < num; i++ ){int temp;cin >> temp;arr.push_back( temp );}// 排序sort( arr.begin(), arr.end() ); // 默认升序排序即可for( auto i = arr.begin(); i!= arr.end(); i++ ){cout << *i;if( i!= arr.end() - 1 ){cout << " ";}else{cout << endl;}} // 注意:行末无空格,而是\n ( 最后一个元素后面无空格,而是\n)return 0;
}

5. 【深基9.例4】求第 k 小的数

难度【普及-】

题目描述

输入 n n n 1 ≤ n < 5000000 1 \le n < 5000000 1n<5000000 n n n 为奇数)个数字 a i a_i ai 1 ≤ a i < 10 9 1 \le a_i < {10}^9 1ai<109),输出这些数字的第 k k k 小的数。最小的数是第 0 0 0 小。

请尽量不要使用 nth_element 来写本题,因为本题的重点在于练习分治算法。

输入格式
输出格式
样例 #1
样例输入 #1
5 1
4 3 2 1 5
样例输出 #1
2

本题代码:

// 洛谷P1923 第 k 小的数
// 本来的思路是使用 sort 进行排序,然后查找第 k 个元素,但是当数据非常多的时候,超时了
// 然后看了题解以后,发现了一个非常好用的方法,nth_element()方法,然后在CSDN上看了一下如何使用,才用的这个方法
// 注意:在写nth_element()方法的时候,第二个参数无需 k - 1,因为题干中明确指出了【k从0开始】,也就是意味着,k与下标是对齐的
// 注意: 使用cin输入数组的时候,运算会超时,改用scanf就不会超时了
#include <iostream>
#include <algorithm>
using namespace std;
int main ( void ){int arr[ 5000000 ];int n, k;cin >> n >> k;for( int i = 0; i < n; i++ ){scanf( "%d", &arr[ i ]);}nth_element( arr, arr + k, arr + n ); // 使用该方法,查找 第 k 小的数cout << arr[ k ];return 0;
}

6.[NOIP2006 普及组] 明明的随机数

难度【普及-】

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N N N 1 1 1 1000 1000 1000 之间的随机整数 ( N ≤ 100 ) (N\leq100) (N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 1 1 1 行为 1 1 1 个正整数,表示所生成的随机数的个数 N N N

2 2 2 行有 N N N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 1 1 1 行为 1 1 1 个正整数 M M M,表示不相同的随机数的个数。

2 2 2 行为 M M M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例 #1
样例输入 #1
10
20 40 32 67 40 20 89 300 400 15
样例输出 #1
8
15 20 32 40 67 89 300 400
提示

NOIP 2006 普及组 第一题

本题代码:

// 洛谷P1059 明明的随机数
// 两种思路:
// 1. 先排序,后去重
// 2. 使用桶排序,下标既是数,元素有值,则证明该数被输入了,最后遍历数组,将>=1的元素输出
// 我使用的 桶排序 方法
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main( void ){int n;int sum = 0;int arr[ 1001 ] = {0}; // 桶排序,下标是数,值是出现的次数cin >> n;for( int i = 0; i < n; i ++ ){int temp;cin >> temp;if( arr[ temp ] == 0 ){sum ++;arr[ temp ] ++;}elsecontinue;}cout << sum << endl;// 遍历数组,输出>=1的元素for( int i = 0; i < 1001; i++ ){if( arr[ i ] >= 1 ){cout << i << " ";}}return 0;
}

7.[NOIP2007 普及组] 奖学金

难度【普及-】

题目背景

NOIP2007 普及组 T1

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金。期末,每个学生都有 3 3 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 3 3 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。

注意,在前 5 5 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279  
5 279

这两行数据的含义是:总分最高的两个同学的学号依次是 7 7 7 号、 5 5 5 号。这两名同学的总分都是 279 279 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 7 7 7 的学生语文成绩更高一些。

如果你的前两名的输出数据是:

5 279  
7 279

则按输出错误处理,不能得分。

输入格式

n + 1 n+1 n+1 行。

1 1 1 行为一个正整数 n ≤ 300 n \le 300 n300,表示该校参加评选的学生人数。

2 2 2 n + 1 n+1 n+1 行,每行有 3 3 3 个用空格隔开的数字,每个数字都在 0 0 0 100 100 100 之间。第 j j j 行的 3 3 3 个数字依次表示学号为 j − 1 j-1 j1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1 ∼ n 1\sim n 1n(恰好是输入数据的行号减 1 1 1)。

保证所给的数据都是正确的,不必检验。

输出格式

5 5 5 行,每行是两个用空格隔开的正整数,依次表示前 5 5 5 名学生的学号和总分。

样例 #1
样例输入 #1
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出 #1
6 265
4 264
3 258
2 244
1 237
样例 #2
样例输入 #2
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出 #2
8 265
2 264
6 264
1 258
5 258

本题代码:

// 洛谷P1093 奖学金
// 思路: 首先这是一道 结构题 + 排序 的题
// 1. 定义一个结构体,存放数据 -->  学号 + 语文成绩 + 数学成绩 + 英语成绩 + 总分
// 2. 编写比较函数 compare --> sort函数需要使用
// 3. 使用sort函数进行排序
// 4. 正常打印
#include <iostream>
#include <algorithm>
using namespace std;
struct student{int id; // 存放学号int chinese; // 存放语文成绩int math; // 存放数学成绩int english; // 存放英语成绩int sum; // 存放总分
};
// 排序规则 --> sort 函数需要使用的【排序函数】
bool compare( student a, student b ){if ( a.sum != b.sum ) // 如果前后两者总成绩 【不相同】 --> 按照总分排序return a.sum > b.sum; else if ( a.chinese!= b.chinese ) // 总成绩 相同 && 语文成绩 【不相同】 --> 按照语文成绩排序return a.chinese > b.chinese;else // 总成绩 相同 && 语文成绩 相同 && 学号 【不相同】 --> 按照学号排序return a.id < b.id;
}
int main( void ){student score[ 305 ]; // 存放学号 + 成绩 + 总成绩int num;cin >> num; // 输入学生人数for( int i = 0; i < num; i++ ){cin >> score[ i ].chinese >> score[ i ].math >> score[ i ].english; // 存放 语 数 英 成绩score[ i ].sum = score[ i ].chinese + score[ i ].math + score[ i ].english; // 计算 总分score[ i ].id = i + 1; // 存放 学号}// 按照规则进行排序sort( score, score + num, compare );// 正常打印for( int i = 0; i < 5; i++ ){cout << score[ i ].id << " " << score[ i ].sum << endl;}return 0;
}

8.宇宙总统

难度【普及-】

题目描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n n n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入格式

第一行为一个整数 n n n,代表竞选总统的人数。

接下来有 n n n 行,分别为第一个候选人到第 n n n 个候选人的票数。

输出格式

共两行,第一行是一个整数 m m m,为当上总统的人的号数。

第二行是当上总统的人的选票。

样例 #1
样例输入 #1
5
98765
12365
87954
1022356
985678
样例输出 #1
4
1022356
提示

票数可能会很大,可能会到 100 100 100 位数字。

1 ≤ n ≤ 20 1 \leq n \leq 20 1n20

本题代码:

// 洛谷P1781 宇宙总统
// 该题需要使用 “高精度整数 / 或者直接存储为字符串”,因为最大100位数,普通类型存储不开
// 用结构体存储 “第n人” + “选票数量” + “票数长度”
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct ddd{int n; // 第n人char num[ 101 ]; // 选票数量 --> 因为数据太大,所以需要用 字符数组int len; // 票数长度
};
bool cmp( ddd a, ddd b ){if( a.len != b.len )return a.len > b.len; // 按票数长度降序 --> 长度若大,则百分百票数大elsereturn strcmp( a.num, b.num ) > 0; // 按票数降序 --> 票数越多,越在前
}
int main( void ){int num; // 竞选总统人数cin >> num;ddd president[ num ];for( int i = 0; i < num; i++ ){cin >> president[ i ].num; // 输入选票数量president[ i ].n = i + 1; // 第几个人president[ i ].len = strlen( president[ i ].num ); // 计算票数长度}sort( president, president + num, cmp ); // 排序cout << president[ 0 ].n << endl; // 输出最大票数的人的编号cout << president[ 0 ].num << endl; // 输出最大票数的人的票数return 0;
}

9.车厢重组

难度【普及-】

题目描述

在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 180 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。

输入格式

共两行。

第一行是车厢总数 N ( ≤ 10000 ) N( \le 10000) N(10000)

第二行是 N N N 个不同的数表示初始的车厢顺序。
:实际上数据中并不都在同一行,有可能分行输入)

输出格式

一个整数,最少的旋转次数。

样例 #1
样例输入 #1
4
4 3 2 1
样例输出 #1
6

本题代码:

// 洛谷P1116 车厢重组 // 一定要记住:即使只计算【步数】,依然要进行中间的【交换】,刚开始做我就犯了这个错,后来才发现!!!!// 该题 使用冒泡的算法,而题目中并未指出要排序,我们不可以省去排序的步骤!!直接打印出题目中想要的 “步数”
// 注:千万不要因为只计算【步骤】,省去【交换】的步骤,这样做出来的答案是错误的,因为既然没有进行交换,那么大数一直没有放到最后边,导致数组中的
// 数据没次循环都是一样的,每次循环大数的位置不是在最后边,所以我们需要进行交换,才能得到正确的答案!!!// 思路:依次循环,每次循环将最大的数字,冒泡到 最后面
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main( void ){int num; // 车厢数量cin >> num;int ans = 0; // 存储结果 --> 步数vector <int> arr ( num ); // 存储车厢for( int i = 0; i < num; i++ ) // 输入cin >> arr[ i ];for( int i = 0; i < num - 1; i ++ ){ //表示次数,次数为 num - 1 次,因为最后一个数,不需要再循环for( int j = 0; j < num - 1 - i; j ++ ){ // 每次循环,将最大的数,冒泡到最后面,排到 i 位置 ,所以是 1 到 iif( arr[ j ] > arr[ j + 1 ] ){ // 因为是从小到大排,所以如果【当前位置】> 【下一个位置】,则交换位置,并且步数 + 1swap( arr[ j ], arr[ j + 1 ] ); // 交换两数ans ++;}}}cout << ans << endl;return 0;
}

10. [NOIP2009 普及组] 分数线划定

难度【普及-】

题目描述

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150 % 150\% 150% 划定,即如果计划录取 m m m 名志愿者,则面试分数线为排名第 m × 150 % m \times 150\% m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

输入格式

第一行,两个整数 n , m ( 5 ≤ n ≤ 5000 , 3 ≤ m ≤ n ) n,m(5 \leq n \leq 5000,3 \leq m \leq n) n,m(5n5000,3mn),中间用一个空格隔开,其中 n n n 表示报名参加笔试的选手总数, m m m 表示计划录取的志愿者人数。输入数据保证 m × 150 % m \times 150\% m×150% 向下取整后小于等于 n n n

第二行到第 n + 1 n+1 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 k ( 1000 ≤ k ≤ 9999 ) k(1000 \leq k \leq 9999) k(1000k9999)和该选手的笔试成绩 s ( 1 ≤ s ≤ 100 ) s(1 \leq s \leq 100) s(1s100)。数据保证选手的报名号各不相同。

输出格式

第一行,有 2 2 2 个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含 2 2 2 个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

样例 #1
样例输入 #1
6 3 
1000 90 
3239 88 
2390 95 
7231 84 
1005 95 
1001 88
样例输出 #1
88 5 
1005 95 
2390 95 
1000 90 
1001 88 
3239 88
提示

【样例说明】

m × 150 % = 3 × 150 % = 4.5 m \times 150\% = 3 \times150\% = 4.5 m×150%=3×150%=4.5,向下取整后为 4 4 4。保证 4 4 4 个人进入面试的分数线为 88 88 88,但因为 88 88 88 有重分,所以所有成绩大于等于 88 88 88 的选手都可以进入面试,故最终有 5 5 5 个人进入面试。

NOIP 2009 普及组 第二题

本题代码:

// 洛谷P1068 分数线划定
// 题目有点长,读了一阵子才读明白题意
// 总而言之,就是有一堆人,然后输入n(参赛人数),m(录取人数) 其中:( m * 150% ) <= n 如果 ( m * 150% )为小数,则向下取整 4.5 取 4
// 注意:如果最后的【分数线】是重分,则要将最后一个重分的人也输出,并且输出人数也要 + 1
// 思路:
// 1. 输入 n 和 m
// 2. 输入 n 个分数,存储到数组中
// 3. 对数组进行排序,从大到小
// 4. 计算出 m * 1.5 向下取整的数 new_m,并且判断: 如果arr[ new_m ] 为 重分,则要将【所有重分的人的分数都打印出来,且 new_m ++】
// 5. 输出分数线,以及分数线的人数
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct ddd{int score; // 存放分数int id; // 存放编号
};
bool cmp( ddd a, ddd b ){if( a.score == b.score ) // 如果分数相等,则按照编号从小到大排序return a.id < b.id;return a.score > b.score;
}
int main( void ){int n, m, new_m; // 参赛人数,录取人数, m * 1.5 向下取整cin >> n >> m;ddd arr[ 5001 ]; // 存放分数, 编号 --> 注意:定义数组的时候,千万不要将 5001 写成 变量n,否则,答案会出错for( int i = 0; i < n; i ++ ){ // 输入分数scanf( "%d%d", &arr[ i ].id, &arr[ i ].score );}// 注意: 先排序,后计算 new_m 的大小sort( arr, arr + n, cmp ); // 排序 --> 从大到小 --> 所有人都要排序,因为有重分的情况会出现,这种情况也要排序,并且记入 new_m 中new_m = m * 1.5; // 分数线 --> 如果是小数,则向下取整 --> 实际上就是【数据截断】// 处理【重分】的情况 --> whilewhile( arr[ new_m - 1 ].score == arr[ new_m ].score && new_m < n ){ // 每次循环,如果 分数相同,则 new_m ++ && 保证不越界(new_m < n)new_m ++;}printf( "%d %d\n", arr[ new_m - 1 ], new_m); // 输出分数线,以及分数线的人数for( int i = 0; i < new_m; i ++ ){ // 输出分数线的人的编号printf( "%d %d\n", arr[ i ].id, arr[ i ].score ); }return 0;
}

11.攀爬者

难度【普及-】

题目背景

HKE 考完 GDOI 之后跟他的神犇小伙伴们一起去爬山。

题目描述

他在地形图上标记了 N N N 个点,每个点 P i P_i Pi 都有一个坐标 ( x i , y i , z i ) (x_i,y_i,z_i) (xi,yi,zi)。所有点对中,高度值 z z z 不会相等。HKE 准备从最低的点爬到最高的点,他的攀爬满足以下条件:

(1) 经过他标记的每一个点;

(2) 从第二个点开始,他经过的每一个点高度 z z z 都比上一个点高;

(3) HKE 会飞,他从一个点 P i P_i Pi 爬到 P j P_j Pj 的距离为两个点的欧几里得距离。即, ( X i − X j ) 2 + ( Y i − Y j ) 2 + ( Z i − Z j ) 2 \sqrt{(X_i-X_j)^2+(Y_i-Y_j)^2+(Z_i-Z_j)^2} (XiXj)2+(YiYj)2+(ZiZj)2

现在,HKE 希望你能求出他攀爬的总距离。

输入格式

第一行,一个整数 N N N 表示地图上的点数。

接下来 N N N 行,三个整数 x i , y i , z i x_i,y_i,z_i xi,yi,zi 表示第 i i i 个点的坐标。

输出格式

一个实数,表示 HKE 需要攀爬的总距离(保留三位小数)

样例 #1
样例输入 #1
5
2 2 2
1 1 1
4 4 4
3 3 3
5 5 5
样例输出 #1
6.928
提示

对于100%的数据, 1 ≤ N ≤ 50000 1\leq N\leq 50000 1N50000,答案的范围在 double 范围内。

本题代码:

// 洛谷P5143 攀爬者
// 本题方法:1. 使用 ”结构体”数组存储“坐标” 2.  按照“高度”对结构体进行排序  3. 遍历数据,按照数学公式计算距离并且累加距离#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;
struct ddd{int x, y, z; // 存放坐标
};
// 比较函数 - 排序规则:按照高度 从小到大 排序
bool cmp( ddd a, ddd b ){return b.z > a.z; // 按照高度 从小到大 排序
}
int main( void ){ddd point[ 50000 ]; // 存放坐标int n; // 存放坐标的个数cin >> n; // 输入坐标的个数// 输入坐标for( int i = 0; i < n; i ++ ){cin >> point[ i ].x >> point[ i ].y >> point[ i ].z;}sort( point, point + n, cmp ); // 按照高度进行由小到大排序double sum = 0; // 存放总距离// 遍历数据,按照数学公式计算距离并且累加距离for( int i = 0; i < n - 1; i ++ ){ // 为什么是 n - 1 呢?因为 我循环中所写的是: 当前位置 与 后一个位置,// 所以我只需要循环到 point[ n - 2 ] 即可,因为最后一个循环计算的是 point[ n - 1 ] 与 point[ n - 2 ] 的距离int new_x = point[ i ].x - point[ i + 1 ].x; // 存储 两个点的 x 坐标的差值int new_y = point[ i ].y - point[ i + 1 ].y; // 存储 两个点的 y 坐标的差值int new_z = point[ i ].z - point[ i + 1 ].z; // 存储 两个点的 z 坐标的差值sum += sqrt( new_x * new_x + new_y * new_y + new_z * new_z ); // 计算距离并累加距离}printf( "%.3lf\n", sum ); // 输出总距离 --> 保留 3 位小数return 0;
}

12.生日

难度【普及-】

题目描述

cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。

输入格式

输入共有 n + 1 n + 1 n+1 行,

1 1 1 行为 OI 组总人数 n n n

2 2 2 行至第 n + 1 n+1 n+1 行分别是每人的姓名 s s s、出生年 y y y、月 m m m、日 d d d

输出格式

输出共有 n n n 行,

n n n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

样例 #1
样例输入 #1
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
样例输出 #1
Luowen
Yangchu
Qiujingya
提示

数据保证, 1 < n < 100 1<n<100 1<n<100 1 ≤ ∣ s ∣ < 20 1\leq |s|<20 1s<20。保证年月日实际存在,且年份 ∈ [ 1960 , 2020 ] \in [1960,2020] [1960,2020]

本题代码:

// 洛谷P1104 生日
// 思路:
// 1. 使用 结构体数组 存储人员信息
// 2. 按照 年龄 进行 排序 --> 使用sort函数,比较函数规则:先按照年,再按照月,再按照日,如果都相等,后输入的在前
// 注意:输入靠后的在前,刚开始看错了,看成了先输入的靠前,导致错了
// 3. 输出 结构体数组 中 第 k 个 元素的 姓名
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;// 定义结构体 --> 存储 姓名 年月日 输入顺序
struct ddd{string name;int year, month, day;int num; // 输入顺序 -> 为了方便排序:若年龄相同,则 先输入的 排在 前面
};
// 比较函数 --> 按照年龄进行排序的规则
bool cmp( ddd a, ddd b ){if( a.year != b.year )return a.year < b.year; // 年 小的在前 即 年龄大的在前else if( a.month != b.month )return a.month < b.month; // 月 小的在前 即 年龄大的在前else if( a.day != b.day )return a.day < b.day; // 日 小的在前,即 年龄大的在前elsereturn a.num > b.num; // 输入顺序 小的在前 即 如果年龄完全相等,输入靠后的在前// 一定要注意: 输入靠后的在前,不是输入靠前的在前
}
int main( void ){int n; // 总人数ddd peo[ 100 ]; // 存储人员信息cin >> n; // 输入总人数// 输入人员信息for( int i = 0; i < n; i ++ ){cin >> peo[ i ].name >> peo[ i ].year >> peo[ i ].month >> peo[ i ].day;peo[ i ].num = i + 1; // 记录输入顺序}sort( peo, peo + n, cmp ); // 按照年龄进行排序for( int i = 0; i < n; i ++ ){cout << peo[ i ].name << endl;}cout << endl;return 0;
}

13.[NOIP1998 提高组] 拼数

难度【普及/提高-】

题目描述

设有 n n n 个正整数 a 1 … a n a_1 \dots a_n a1an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式

第一行有一个整数,表示数字个数 n n n

第二行有 n n n 个整数,表示给出的 n n n 个整数 a i a_i ai

输出格式

一个正整数,表示最大的整数

样例 #1
样例输入 #1
3
13 312 343
样例输出 #1
34331213
样例 #2
样例输入 #2
4
7 13 4 246
样例输出 #2
7424613
提示

对于全部的测试点,保证 1 ≤ n ≤ 20 1 \leq n \leq 20 1n20 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109

NOIP1998 提高组 第二题

本题代码:

// 洛谷P1012 拼数
// 思路:
// 本题的排序不是正常的排序,不是比较数值大小 --> 因为是要求出数字拼一起的最大值,所以排序应该是 两数不同顺序相加 哪个字典序大哪个在前...
// 实际上也就是字符串比较
// 1. 使用 字符串数组 存储 数字 --> 因为本题的排序是基于“字符串”而不是“数值”
// 2. 定义比较函数 --> 按照 字符串 进行比较 --> 啊+ b 与 b + a 字符串相加, 哪个字典序大哪个在前 --> 注意:字符串比较是从第一位向最后一位比较,大的在前
// 3. 输出 字符串数组 中 所有 元素的 字符串
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;// 定义比较函数
bool cmp( string a, string b ){return a + b > b + a; // 相加 在再比较 --> 大的在前 我刚开始就写错了,写成了 a > b 因为是相加后最大的,所以比较的时候也要进行相加
}
int main( void ){string arr[ 20 ]; // 存放 <= 20 个字符串int n; // 输入的字符串的个数cin >> n; // 输入字符串的个数// 输入字符串for( int i = 0; i < n; i ++ ){cin >> arr[ i ];}sort ( arr, arr + n, cmp ); // 按字符串比较 大的在前// 打印字符串for( int i = 0; i < n; i ++ ){cout << arr[ i ];}cout << endl;return 0;
}

相关文章:

洛谷【排序】算法的题单 - 笔记

2024-12-09 - 第 37 篇 洛谷【排序】题单 - 笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 洛谷【排序】题单合集 一、排序算法都有… 1. 简单排序算法 这些算法通常是基础的排序方法&#xff0c;容易理解和实现&#xff0c;但效率较低&#xff0c;适用于数据量较小的情况…...

《筑牢网络安全防线:守护数字时代的生命线》

《筑牢网络安全防线&#xff1a;守护数字时代的生命线》 一、网络安全的重要性二、网络安全面临的挑战三、网络安全技术四、网络安全案例分析五、如何加强网络安全防护六、结论 一、网络安全的重要性 网络安全在当今数字化时代的重要性不言而喻&#xff0c;它涵盖了多个关键领…...

VB.net进行CAD二次开发(二)与cad交互

开发过程遇到了一个问题&#xff1a;自制窗口与控件与CAD的交互。 启动类&#xff0c;调用非模式窗口 Imports Autodesk.AutoCAD.Runtime Public Class Class1 //CAD启动界面 <CommandMethod("US")> Public Sub UiStart() Dim myfrom As Form1 New…...

Python函数——函数的返回值定义语法

一、引言 在Python中&#xff0c;函数的返回值是其核心功能之一&#xff0c;它使得函数能够将计算结果传递给调用者&#xff0c;进而推动程序的逻辑和功能实现。理解和掌握函数的返回值语法&#xff0c;不仅能够提高代码的模块化和可读性&#xff0c;还能使程序更加高效和灵活…...

Python 布尔索引筛选数据

Python 布尔索引筛选数据 1. 布尔索引筛选数据1.1. 根据布尔索引对矩阵元素进行赋值1.2. 根据布尔索引对矩阵元素进行赋值1.3. 根据布尔索引对矩阵元素进行赋值 2. logits[logits < values[:, [-1]]] -1000References 1. 布尔索引筛选数据 布尔索引允许通过条件筛选矩阵中…...

mybatis缓存

一级缓存和二级缓存范围不一样 只缓存查询&#xff0c;缓存增删改没有意义 先在mybatis-config.xml加入 <setting name"cacheEnabled"value"true"/> 在mapper.xml中开启二缓存 <!--回收策略为先进先出&#xff0c;每隔60秒刷新一次&#xff0c…...

Linux下的编程

实验7 Linux下的编程 一、实验目的 熟练掌握Linux下Python编程的方法、函数调用方法以及shell编程中的控制结构。 二、实验环境 硬件&#xff1a;PC电脑一台&#xff0c;网络正常。 配置&#xff1a;win10系统&#xff0c;内存大于8G &#xff0c;硬盘500G及以上。 软件&a…...

使用Java创建RabbitMQ消息生产者的详细指南

目录 在现代分布式系统中&#xff0c;消息队列是实现异步通信的重要工具。RabbitMQ作为一种流行的开源消息代理&#xff0c;支持多种消息协议&#xff0c;广泛应用于微服务架构和事件驱动的应用程序中。本文将深入探讨如何使用Java创建RabbitMQ的消息生产者&#xff0c;发送消息…...

笔记本外接显示屏没声音

1、笔记本正常有声音&#xff0c;但是外接显示屏后没有声音了怎么回事呢&#xff1f;原来外接显示屏后笔记本的声音输出会自动选择显示屏的音频输出&#xff0c;但是显示屏可能没有声音输出所以导致笔记本没有声音。 2、解决办法&#xff1a;打开笔记本设置&#xff0c;选择声…...

【Linux】Linux权限管理:文件与目录的全面指南

在Linux系统中&#xff0c;权限管理是确保数据安全的关键。本文将为大家介绍Linux文件与目录的权限管理&#xff0c;帮助你理解如何设置和管理访问权限。无论你是新手还是有经验的用户&#xff0c;这里都将提供实用的技巧和知识&#xff0c;助你更好地掌握Linux环境。让我们一起…...

并发在前端中的应用?

‌并发在前端中的应用主要体现在处理多个请求和优化页面加载速度方面‌。前端并发处理通常涉及在极短时间内发送多个数据请求&#xff0c;例如在页面渲染时同时请求多个数据。通过并发处理&#xff0c;可以显著减少页面加载时间&#xff0c;提升用户体验。 前端并发处理的具体…...

Spring Boot助力,一键解锁招聘全流程信息精细化管理

2系统相关技术 2.1 Java语言介绍 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景&#…...

沉浸式多用户跟踪解决方案

沉浸式多用户VR跟踪解决方案&#xff0c;支持使用HTC VIVE或Valve Index等消费级虚拟现实头盔在房间内执行大范围多用户跟踪。该解决方案不仅能够跟踪处于坐姿或其他静止用户的头部和控制器&#xff0c;还支持房间内多用户动态跟踪。 通常房间内的跟踪受限于特定的系统能力&…...

“切片赋值”创建列表批量操作“新”方法(Python)

[start:end]切片赋值&#xff0c;扩展了list批量增减元素的操作能力。 (笔记模板由python脚本于2024年12月06日 15:07:56创建&#xff0c;本篇笔记适合研python基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;…...

Linux中-vvv详细输出命令

在 Shell 脚本中&#xff0c;有时会看到某些命令后面加上 -vvv 或类似的选项。这个选项的作用通常与命令的 **调试模式** 或 **详细输出** 相关。不同的命令和工具对于选项的解释和处理方式不同&#xff0c;因此 -vvv 的具体含义取决于它所跟随的命令。 ### 一般来说&#xff…...

获取淘宝商品评论数据的API应用:市场调研|产品更新|用户数据

下面是一段我用item_review&#xff08;获取商品评论数据&#xff09;抓来的商品评论数据&#xff1a; "items": {"total_results": 375,"totalpage": 38,"page_size": 10,"page": "1","item": [{&quo…...

VRRP的知识点总结及实验

1、VRRP VRRP(Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议)既能够实现网关的备份&#xff0c;又能解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 2、VRRP技术概述&#xff1a; 通过把几台路由设备联合组成一台虚拟的“路由设备”…...

群控系统服务端开发模式-应用开发-邮件发送工具类

一、邮件发送工具类开发 1、添加框架对应的SDK composer require phpmailer/phpmailer 2、添加工具集 在根目录下extend文件夹下创建Email文件夹&#xff0c;在Email文件夹下添加工具集控制并命名为EmailSender.php <?php /*** 邮件发送工具* User: 龙哥三年风水* Date: …...

pytest 的简单介绍

官方文档&#xff1a;pytest 文档 1. pytest 概述 pytest 是一个功能强大的 Python 测试框架&#xff0c;旨在简化单元测试和功能测试的编写与执行。它不仅支持简单的单元测试&#xff0c;还能进行更复杂的测试&#xff0c;如数据驱动的测试、并发测试等。pytest 支持自动化发…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...

【LeetCode每日一题】LeetCode 976.三角形的最大周长

LeetCode 976.三角形的最大周长 题目描述 给定一个包含非负整数的数组 nums&#xff0c;其中每个元素表示一个线段的长度。你需要从中选出三个线段&#xff0c;组成一个三角形&#xff0c;使得三角形的周长最大&#xff0c;并返回这个最大周长。如果无法组成三角形&#xff0…...

在 Ubuntu 24 上安装 Redis 7.0.15 并配置允许所有 IP 访问

前提条件 一台运行 Ubuntu 24 的服务器拥有 sudo 权限的用户 步骤一&#xff1a;更新系统包 首先&#xff0c;确保系统包是最新的&#xff0c;以避免潜在的依赖问题。 sudo apt update sudo apt upgrade -y步骤二&#xff1a;安装编译 Redis 所需的依赖 Redis 需要一些编译…...

C# 中的异常处理:构建健壮和可靠的程序

C#中的异常处理&#xff08;Exception Handling&#xff09;。异常处理是编程中非常重要的一部分&#xff0c;它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理&#xff0c;可以使应用程序更加健壮、可靠&#xff0c;并提供更好的用户体验。以下…...

Prime2_解法二:openssl解密凭据

Prime2_解法二&#xff1a;openssl解密凭据 本博客提供的所有信息仅供学习和研究目的&#xff0c;旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动&#xff0c;您将独自承担全…...

数据结构 ——数状存储的基本概念

数据结构 ——数状存储的基本概念 一、树状存储基本概念 1、 深度&#xff08;层数&#xff09;&#xff1a;计算一个节点的深度&#xff0c;从根节点算起&#xff08;从1开始计数&#xff09;&#xff0c;到该节点所经过的节点数&#xff08;包括此节点&#xff09;为树的深度…...

【网盘系统】递归删除批量文件、从回收站恢复文件、彻底删除文件

为何需要用到递归&#xff1f; 在网盘系统中&#xff0c;文件的类型分为文件和文件夹两种类型。当我们想要批量删除文件时&#xff0c;不乏其中会包含文件夹&#xff0c;而想要删除这个文件夹&#xff0c;自然其中所包含的文件都要删除&#xff0c;而其中所包含的文件也有可能…...

C++ 列表初始化(initializer_list)

列表初始化(initializer_list) 列表初始化是C中的一种语法特性&#xff0c;引入于C11&#xff0c;用于更简单直观地初始化变量、对象或容器。它使用花括号 {}&#xff0c;提供了更安全的初始化方式&#xff0c;避免了类型窄化转换等潜在错误。 定义 列表初始化是用花括号 {}…...

【Keil】Keil MDK 已经不再提供 ARM Compiler v5

该问题出现在 Keil MDK v5.12 之后 用必应搜索相关问题&#xff0c;发现早已在 ARM community 提了 How can I install Compiler Version 5 for Keil vision 5 回答给出了这个文档 Documentation - Arm Developer 文档提到了 ARM Compiler 5 的下载地址&#xff0c;但是得登录 …...

Knowledge Graph Studio:让知识图谱构建更简单、更智能

一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时&#xff0c;让我产生了一些疑惑和不解&#xff0c;因为从大家交流的规划方向来看&#xff0c;更多的还是集中在Prompt提示词工程&#xff08;包括提示词的管理、测试、评估、调优&#xff09;这一块规划的确实挺细&a…...

【jvm】垃圾判别阶段算法

目录 1. 说明2. 引用计数算法2. 可达性分析算法3. 垃圾判别阶段的过程 1. 说明 1.JVM主要使用两种垃圾判别算法&#xff1a;引用计数算法和可达性分析算法。 2. 引用计数算法 1.原理&#xff1a;为每个对象维护一个引用计数器&#xff0c;每当有地方引用该对象时&#xff0c…...

深入理解Linux进程管理机制

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言 进程是现代操作系统中一个不可或缺的概念&#xff0c;其主要目的在于管理资源、实现并发、提高系统效率&#xff0c;并确保系统的稳定性和安全性。 进程的定义 进程&#xff08;Process&#xff09; 是计算机操作系统中…...

OV2640摄像头模块介绍

目录 一、引言 二、模块概述 三、技术特点 四、工作原理 五、接口类型 六、应用领域 七、使用方法 八、参数设置 九、图像数据处理 十、调试和故障排除 十一、结语 一、引言 在当今的科技时代&#xff0c;图像采集和处理技术在众多领域发挥着至关重要的作用。其中&…...

机器人的动力学前馈控制

机器人前馈技术可加快伺服驱动器内部的误差收敛速度&#xff0c;进而改善机器人的动态响应特性&#xff0c;解决机器人在运动过程中的抖动问题&#xff0c;提升机器人系统的精度和效率。 对于关节型机器人而言&#xff0c;在理想的刚性连接下&#xff0c;若给定每个关节所需要的…...

Python+OpenCV系列:图像的几何变换

Python OpenCV 系列&#xff1a;图像的几何变换 引言 在图像处理领域&#xff0c;几何变换是一个非常重要的操作&#xff0c;它可以改变图像的位置、大小、方向或形状。在计算机视觉中&#xff0c;这些操作对于图像预处理、特征提取和图像增强至关重要。本文将介绍如何利用 …...

IC验证基础知识系列随笔

一、断言 and 和 和 intersect 区别 And 指的是两个序列具有相同的起始点&#xff0c;终点可以不同。 Intersect 指的是两个序列具有相同的起始点和终点。 Or 指的是两个序列只要满足一个就可以 Throughout 指的是满足前面要求才能执行后面的序列 二、Break&#xff1b;co…...

网络测速工具

1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps&#xff08;bits per second&#xff09; 字节和比特的换算…...

windows将文件推给Android真机/实机

记录一下 因为以前只试过从真机实机中将文件推给windows 但是从windows只简单复制粘贴的话会一直报错。 1.电脑安装adb 2.手机开启开发者模式 usb调试 3.usb连接选择文件传输 4.推送命令adb push 文件路径 /sdcard/download 步骤1和2和3不作赘述&#xff0c;可以搜相关配置教程…...

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》&#xff01;由BamBozzle制作&#xff0c;这款游戏完全用Scratch构建&#xff0c;带你体验开放世界飞行的自由与乐趣。从起飞到降落&#xff0c;每一步都需要你的精准操作&#xff01;更棒的是&#xff0c;这款游戏…...

nonolog转化为ctf的困难

nonolog转化为ctf的困难 nanolog分析的中间的总结二者之间的差别 nanolog分析的中间的总结 如果目标是转nanolog为CTF格式&#xff0c;最重要的应该是meta的定义的转换的问题了。 目前我是稍有气馁。 感觉这不是一个好的方向。 如果领导能给连续的时间&#xff0c;完全开发自定…...

Sqoop导入数据(mysql---->>hive)

目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出&#xff0c;放到hdfs上&#xff08;由targ…...

vivado bd文件复制

不同工程是无法进行BD文件复制的&#xff0c;可以通过将被复制的BD文件添加到需要复制的BD文件的工程中&#xff0c;然后再工程内进行复制...

2024年深圳杯数学建模C题编译器版本的识别问题解题全过程文档及程序

2024年深圳杯数学建模 C题 编译器版本的识别问题 原题再现&#xff1a; 作为一种重要的工具&#xff0c;电子计算机自诞生以来&#xff0c;经历了极为快速的发展。区区百年的时间内&#xff0c;无论从体积、能耗、计算速度&#xff0c;还是应用能力等方面&#xff0c;电子计算…...

介绍一下希尔排序法(c基础)

hi , I am 36 适合对象c语言初学者 希尔排序&#xff08;Shell Sort&#xff09;是一种改进的插入排序算法&#xff0c;它通过将原始数据分成多个子序列来改善插入排序在处理大规模无序数组时性能较差的情况。 基本原理 希尔排序的基本思想是先将整个待排序的记录序列分割成为…...

SQL,根据数据的时间跨度进行不同粒度的统计

MSSQL 的某个视图会生成时间跨度不同的数据&#xff0c;当时间跨度小于 30 天时&#xff1a; idbranchIdtotalPricecreatedAt8512718.662022-07-03 08:49:27.7272613832.692022-07-06 09:08:06.8808919569.852022-07-07 04:13:09.2308011523.622022-07-07 04:38:29.3131512500…...

OPenCV 图片局部放大

m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域&#xff08;这里是图像中心部分…...

【C#设计模式(19)——备忘录模式(MementoPattern)】

前言 备忘录模式&#xff1a;将想要备份的信息交给备忘录对象来管理。通过设置初始、备份、修改、恢复等状态展示备忘录模式的使用。 代码 //备忘录类 public class Memento {private string state;public string State { get>state;}public Memento(string state){this.st…...

使用 Nginx 在同一端口部署两个前端项目并配置子路径

在现代 Web 开发中&#xff0c;我们经常需要在同一台服务器上部署多个前端项目。这不仅可以节省资源&#xff0c;还可以简化管理。本文将指导你如何使用Nginx在同一端口上部署两个前端项目&#xff0c;并通过配置子路径来区分它们。 环境准备 首先&#xff0c;我们需要准备两…...

CISC和RISC的区别

CISC是什么 CISC是一种指令集设计方式&#xff0c;全程叫复杂指令集&#xff0c;这种指令设计模式包含大量的复杂指令和复杂的寻址方式&#xff0c; 以下是CISC架构的一些主要特点&#xff1a; 丰富的指令集&#xff1a;CISC处理器通常包含大量的指令&#xff0c;这些指令覆盖…...

学生信息管理系统(简化版)后端接口

目录 allAPI __init__.py是空文件&#xff0c;目的让python知道这个文件夹是个包 ClassInfo.py from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from API.database import get_db, Base from sqlalchemy import Column, String,…...

一、开启 GD32 单片机的学习之门

文章目录 一、开启GD32单片机的学习之门二、筑牢根基&#xff1a;GD32单片机基础知识全解析&#xff08;一&#xff09;单片机概述 三、开发环境搭建&#xff08;一&#xff09;软件下载与安装&#xff08;二&#xff09;安装GD32F450设备支持包&#xff08;三&#xff09;编译…...