首页 > 其他分享 >洛谷排序

洛谷排序

时间:2024-02-04 09:03:05浏览次数:30  
标签:sort 洛谷 string int ll 取整 排序

排序:从小到大

冒泡排序--->时间超过10就超时

查看代码


#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 个不同的数表示初始的车厢顺序。
:实际上数据中并不都在同一行,有可能分行输入)

输出格式

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

输入输出样例

输入 #1
4
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​。

输出格式

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

输入输出样例

输入 #1
3
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

相关文章

  • 快速排序算法
    快速排序算法的核心思想是分治法(DivideandConquer)。快速排序算法通过以下步骤实现排序:1.选择基准值 :从数列中选择一个元素作为基准值(pivot),通常选择第一个元素。2.分区操作 :重新排列数列,使得所有小于基准值的元素都移到基准的前面,而所有大于基准值的元素都移到基准的后......
  • 第二章:基础查询与排序
    第二章:基础查询与排序2.1SELECT语句基础2.1.1从表中选取数据SELECT语句从表中选取数据时需要使用SELECT语句,也就是只从表中选出(SELECT)必要数据的意思。通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)。基本SELECT语句包含了SELECT和FROM两个子句(clause)......
  • 洛谷题解-P1194 买礼物
    https://www.luogu.com.cn/problem/P1194题目描述又到了一年一度的明明生日了,明明想要买BBB样东西,巧的是,这BBB样东西价格都是AAA元。但是,商店老板说最近有促销活动,也就是:如果你买了第III样东西,再买第JJJ样,那么就可以只花KI,JK_{I,J}KI,J​元,更巧的是,KI,JK_{I,J}K......
  • 算法入门:排序算法
    文章目录1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序 1.冒泡排序思想:比较相邻元素:从数组的第一个元素开始,比较相邻的两个元素,如果它们的顺序不对(比如前面的元素大于后面的元素),则交换它们的位置。一轮遍历:一轮比较和可能的交换后,最......
  • 【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 洛谷P5907 数列求和加强版 / SPOJ MOON4
    题面描述求\[\sum_{i=1}^ni^ka^i\]对\(998244353\)取模的结果。\(O(k)\)做法为了推导方便,下令\(p=a^{-1}\)。即求\[\sum_{i=1}^n\frac{i^k}{p^i}\]我们裂项,即尝试寻找多项式\(f(x)\),使得\[\frac{x^k}{p^x}=\frac{f(x)}{p^{x-1}}-\frac{f(x+1)}{p^x}\]即\[x^k......
  • 第十五节:排序算法详解3(希尔排序、计数排序、桶排序、基数排序)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • [转帖]SQL SERVER--- 排序规则、数据类型
    https://zhuanlan.zhihu.com/p/162933497 一、排序规则有时候我们向数据库插入文本时,会出现乱码“?”,这时有可能是我们创建数据库没有设置好排序规则以Chinese_PRC_CI_AS为例前半部分Chinese_PRC指的是针对大陆简体字unicode的排序规则后半部分的含义为:_BIN二进......
  • 冒泡排序
    importjava.sql.SQLOutput;importjava.util.Arrays;importjava.util.Scanner;//冒泡排序publicclasstest{publicstaticvoidmain(String[]args){int[]a={5,4,6,8,9,1,7,2,3};intarray[]=sort(a);System.out.println(Arrays.to......
  • 【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......