排序:从小到大
冒泡排序--->时间超过109 就超时
查看代码
#include<bits/stdc++.h>//从小到大
using namespace std;
typedef long long int ll;
const int N=1e5+6;
ll a[N];
ll n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=1;j<n;j++){
if(a[j]>a[j+1]){
ll b=a[j];
a[j]=a[j+1];
a[j+1]=b;}}}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
防止超时就用stl
查看代码
#include<bits/stdc++.h>//从小到大
using namespace std;
typedef long long int ll;
const int N=1e5+6;
ll a[N];
ll n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
小技巧:
(1)产生随机数:
产生[1,1000]的随机数
srand((unsigned)time(NULL));
int n=rand()%1000+1;
(2)排序+去重
先用sort来进行从小到大排序再去重
sort(a,a+m);
int k=unique(a,a+m)-a;
cout<<k<<endl;
//去重后剩余元素
for(int i=0;i<k;i++){
cout<<a[i]<<" ";
}
(3)字符串可以直接比较string用><=
(4)加快输入输出用printf scanf
#include<bits/stdc++.h>
using namespace std;
const int N=5e6+7;
int n;
long long int a[N];
int m;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n);
printf("%d",a[m]);
return 0;
}
P1116 车厢重组
P1116 车厢重组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
--->求相邻两节车厢交换最小的旋转次数用冒泡排序
输入格式
共两行。
第一行是车厢总数 N(≤10000)。
第二行是 N 个不同的数表示初始的车厢顺序。
(注:实际上数据中并不都在同一行,有可能分行输入)
输出格式
一个整数,最少的旋转次数。
输入输出样例
输入 #14
4 3 2 1
输出 #1
6
查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+6;
int a[N];
int n;
int main(){
int sum=0;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<n;i++){
for(int j=0;j<n-1;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
sum++;
}
}}
cout<<sum;
return 0;
}
P1012 [NOIP1998 提高组] 拼数
P1012 [NOIP1998 提高组] 拼数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 ai。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #13
13 312 343
输出 #1
34331213
输入 #2
4
7 13 4 246
输出 #2
7424613
说明/提示
对于全部的测试点,保证 1≤n≤20,1≤ai≤109。
NOIP1998 提高组 第二题
//考察的是利用stl里的sort排序
排序方法:
任意取两个string b和c,b在前c在后
然后因为要使拼接结果最大,所以返回b+c>c+b--->b在前所得string大
查看代码
#include<bits/stdc++.h>
using namespace std;
string a[26];
int n;
bool com(string &b,string &c){
return (b+c>c+b );
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,com);
for(int i=0;i<n;i++){
cout<<a[i];
}
}
利用sort以及排序方式使字符串数组由大到小排序
#include<bits/stdc++.h>
using namespace std;
bool com(string b,string c){
return b>c;
}
int main(){
string a[4];
a[0]="123";
a[1]="6";
a[2]="26";
a[3]="11";
//从大到小
sort(a,a+4,com);
for(int i=0;i<4;i++)cout<<a[i]<<endl;
return 0;
}
如果不写排序方式默认由小到大
取整函数
一、向上取整函数ceil(x)
ceil(x)返回的值是大于或等于x的最小整数
eg:
给定一个数: 4.9
向上取整——> ceil(4.9)得到的值是 5
给定一个数: -2.5
向上取整——> ceil(-2.5)得到的是 -2
二、向下取整函数floor(x)
floor(x)返回的值是小于或等于x的最大整数
eg:
给定一个数: 4.9;
向下取整——> floor(4.9)得到的值是4
给定一个数: -2.5
向下取整——> floor(-2.5)得到的是 -3
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_73456169/article/details/128102392
标签:sort,洛谷,string,int,ll,取整,排序 From: https://www.cnblogs.com/luckyhappyyaoyao/p/17995624