洛谷每日三题之第六天

简介: 洛谷每日三题之第六天


目录

P1177 【模板】快速排序

题目描述

输入格式

输出格式

输入输出样例

说明/提示

做题总结

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

题目描述

输入格式

输出格式

输入输出样例

做题总结

P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here

题目描述

输入格式

输出格式

输入输出样例

说明/提示

做题总结

P1177 【模板】快速排序

题目描述

利用快速排序算法将读入的 NN 个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)

输入格式

第 11 行为一个正整数 NN,第 22 行包含 NN 个空格隔开的正整数 a_iai,为你需要进行排序的数,数据保证了 A_iAi 不超过 10^9109。

输出格式

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

输入输出样例

输入 #1复制

5

4 2 4 5 1

输出 #1复制

1 2 4 4 5

说明/提示

对于 20\%20% 的数据,有 N\leq 10^3N≤103;

对于 100\%100% 的数据,有 N\leq 10^5N≤105。

做题总结

本题主要考察分治法,快速排序,第一次运行STL,开启O(2)优化全部样例通过

 

# include <iostream>
using namespace std;
int a[100010];
void qsort(int a[],int l,int r)
{
if(l>=r)
{
  return ;
}
int pivot=a[l];
  int left=l;
  int right=r;
  while(left<right)
  {
    while(left<right&&a[right]>=pivot)
      {
        right--;
      }
      if(left<right)      //说明  a[right]<pivot   需要移位pivot左边 
      {
        a[left]=a[right];  //把最左值覆盖   因为有pivot可以暂存 
      }
      while(left<right&&a[left]<=pivot)//进行完右边进行左边 
      {
        left++; 
      }
      if(left<right)  //说明 a[left]>pivot    右调 
      {
      a[right]=a[left];      //  此时right的值已经调走        
      } 
      if(left>=right)
      {
      a[left]=pivot;  
      } 
      //上边是进行初次排序
      //下边是分治  左右
  }
    qsort(a,l,right-1);//最初位置到 pivot位置的前一个 
    qsort(a,right+1,r); // 从pivot位置的下一个到最后 
}
int main() 
{
  int n;
  cin>>n;
  int a[n];
  for(int i=0;i<n;i++)
  {
    cin>>a[i];
  }
  qsort(a,0,n-1); 
    for(int i=0;i<n;i++)
  {
    cout<<a[i]<<" ";
  }
}

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

题目描述

输入 nn(1 \le n < 50000001≤n<5000000 且 nn 为奇数)个数字 a_iai(1 \le a_i < {10}^91≤ai<109),输出这些数字的第 kk 小的数。最小的数是第 00 小。

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

输入格式

输出格式

输入输出样例

输入 #1复制

5 1

4 3 2 1 5


输出 #1复制

2

做题总结

本题还是考察快速排序,而且也是STL,开启O(2)也是STL,输入输出改成scanf     printf

再开启O(2)样例完全通过

# include <bits/stdc++.h>
using namespace std;
int a[5000000];
void qusort(int a[],int l,int r)
{
  if(l>r)
  {
    return ;
  }
  int left=l;
  int right=r;
  int piv=a[l];
  while(left<right)
  {
    while(left<right&&a[right]>piv)
    {
      right--;
    } 
     if(left<right) //说明a[right]<piv   换位 
     {
      a[left]=a[right];
     }
     //右侧移位之后开始左标识移动
     while(left<right&&a[left]<=piv)  //=是为了防止a[right] 
    {
    left++;   
    } 
    if(left<right)
    {
      a[right]=a[left]; 
    }
    if(left>=right)
    {
      a[left]=piv;
    }
  }
  //出循环说明=
  //分治
   qusort(a,l,left-1);
   qusort(a,left+1,r); 
}
int main()
{
  int n,m;
  scanf("%d%d",&n,&m);
  //cin>>n>>m;
    int a[n];
    for(int i=0;i<n;i++)
    {
      scanf("%d",&a[i]);
    }
qusort(a,0,n-1);    
printf("%d",a[m]);
//  cout<<a[m];
 } 

P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here

题目描述

众所周知,在每一个彗星后都有一只 UFO。这些 UFO 时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的 UFO 带走。

小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 \texttt AA 是 11,\textttZ 是 2626。例如,\texttt{USACO}USACO 小组就是 21 \times 19 \times 1 \times 3 \times 15=1795521×19×1×3×15=17955。如果小组的数字 \bmod 47mod47 等于彗星的数字 \bmod 47mod47,你就得告诉这个小组需要准备好被带走!(记住“a \bmod bamodb”是 aa 除以 bb 的余数,例如 34 \bmod 1034mod10 等于 44)

写出一个程序,读入彗星名和小组名并算出用上面的方案能否将两个名字搭配起来,如果能搭配,就输出 GO,否则输出 STAY。小组名和彗星名均是没有空格或标点的一串大写字母(不超过 66 个字母)。

输入格式

第1行:一个长度为 11 到 66 的大写字母串,表示彗星的名字。

第2行:一个长度为 11 到 66 的大写字母串,表示队伍的名字。

输出格式

输入输出样例

输入 #1复制

COMETQ

HVNGAT

输出 #1复制

GO

输入 #2复制

ABSTAR

USACO

输出 #2复制

STAY

说明/提示

题目翻译来自 NOCOW。

USACO Training Section 1.1

做题总结

本题属于入门级别   很简单


相关文章
|
算法 C++ Python
【每日算法Day 87】今天我脱单了,所以大家不用做题了!
【每日算法Day 87】今天我脱单了,所以大家不用做题了!
120 0
三道好题分享
上课睡觉 - AcWing题库
84 0
|
机器学习/深度学习
【蓝桥杯集训·每日一题】 AcWing 3996. 涂色
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 区间DP Unique函数
116 0
|
存储 人工智能 算法
【蓝桥杯集训·最后一次周赛】AcWing 第 97 场周赛
文章目录 第一题 AcWing 4944. 热身计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4945. 比大小 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4946. 叶子节点 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
127 0
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第94场周赛
文章目录 第一题 AcWing 4870. 装物品 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4871. 最早时刻 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4872. 最短路之和 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
73 0
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第 95 场周赛
文章目录 第一题 AcWing 4873. 简单计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4874. 约数 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4875. 整数游戏 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
107 0
|
机器学习/深度学习 Java C++
【寒假每日一题】AcWing 4818. 奶牛大学(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
91 0
|
存储
【蓝桥杯集训·每日一题】AcWing 3777. 砖块
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 递推
105 0
|
机器学习/深度学习 编译器
【AcWing周赛】AcWing第85场周赛
目录 &lt;一&gt;Acwing 4791. 死或生 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 &lt;二&gt;Acwing 4792. 最大价值 一、题目 1、原题链接 2、题目描述 二、解题报告: 1、思路分析 2、时间复杂度 3、代码详解 &lt;三&gt;Acwing 4793. 危险程度 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 &lt;四&gt; 知识风暴 1、排序不等式 2、贪心法 3、数据范围 4、并查集 基本操作
82 0
|
机器学习/深度学习 人工智能 安全
【AcWing周赛】AcWing第86场周赛
目录 <一>AcWing 4794. 健身 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 <二>AcWing 4795. 安全区域 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 <三>AcWing 4796. 删除序列 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
76 0