谢谢管理员大大给过

优先队列速通大法

hello!我又来水体了,不过嘛,相对来说这道题普及-不算水。

那我们就来研究研究吧。

先看题目

题目传送门

F1:0分暴力

一开始我也是闲的没事想要弄一下暴力做法,结果令人悲伤。

啊哈,当然这个暴力肯定AC不了,然而再其它oj上有可能AC(我AC过),当然洛谷肯定不行哈,不然起不到学习的作用了。

给大家看一下暴力代码吧,也没什么好说的啦:

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct node{int x,y,z;
};
bool cmp(node x,node y)
{return x.x<y.x;
}
node w[200005];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>w[i].x;w[i].y=1;w[i].z=i;}sort(w+1,w+n+1,cmp);string s;cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='0'){//          cout<<w[1].y<<endl;for(int j=1;j<=n;j++){if(w[j].y==1){//                  cout<<0<<" "<<j<<" "<<i<<endl;cout<<w[j].z<<" ";w[j].y=2;
//                  cout<<w[j].y<<endl;break;}}}if(s[i]=='1'){for(int j=n;j>=1;j--){if(w[j].y==2){cout<<w[j].z<<" ";w[j].y=3;break;}}}}return 0;
}

好的,就是这样。

不过之后我就很烦恼,也不知道怎么用,我想着想着,就大喊了一句:“STL!我爱你!”。

大家应该也猜到了,我肯定又要厚颜无耻的使用STL速通大法了。

好言归正传,我们今天就来学习一下STL里的优先队列。

优先队列

这个不想map什么的,这个和队列差不多,队列就不讲了吧,不会的朋友可以上网搜一下。

那我们这里就主要讲一下优先队列和队列的区别。

首先优先队列优先队列,他的每一个数据都具有排序的优先顺序。而注意,和map,set不同的是他底部是堆的。

看一下优先队列的一些常用函数,和队列有一点区别o~

top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容

然后看一下定义优先队列

priority_queue <int> q1;

这是最基本的。

priority_queue <int,vector<int>,greater<int> > q1;//从大到小
priority_queue <int,vector<int>,less<int> > q2;//从小到大

然后结构体,外配cmp函数
F1:

struct node{int x,y;friend bool operator<(node a,node b){return a.x<b.x;}
};
priority_queue<node> q;

F2:

struct node{int ans;int w;
};
struct cmp1{bool operator ()(node a,node b){return a.w>b.w;}
};
priority_queue<node,vector<node>,cmp1> q;

果然vector和优先队列是STL里的好兄弟,定义都要一起

行了,就先讲这么多,剩下的去找dalao查一查吧

F2:100AC优先队列

我们的思路就是定义两个优先队列,一个存储内向(从小到大),一个存储外向(从大到小)。一开始将数据输入内向队列,接着每上车一个,就将内向队列顶部删除插入到外向中,接着外向遍历之后删除即可。具体看代码:

#include<iostream>
#include<string>
#include<queue>//队列头文件
using namespace std;
struct node{//结构体 int ans;int w;
};
struct cmp1{//从大到小 bool operator ()(node a,node b){return a.w>b.w;}
};
struct cmp2{//从小到大 bool operator ()(node a,node b){return a.w<b.w;}
};
priority_queue <node,vector<node>,cmp1> q1;//内向
priority_queue <node,vector<node>,cmp2> q2;//外向
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;q1.push(node{i,x});//存储进入内向优先队列 }string a;//01字符串 cin>>a;for(int i=0;i<a.size();i++){if(a[i]=='0')//如果内向 {if(!q1.empty())//其实这题不用,好习惯。 {cout<<q1.top().ans<<" ";//输出顶部id q2.push(q1.top());//插入外向优先队列中 q1.pop();//删除 }}else{if(!q2.empty())//同上 {cout<<q2.top().ans<<" ";//输出顶部 q2.pop();//删除 }}}return 0;
}//就这么简单完毕!

好的今天的题目讲解完了,你们学费了吗。
感谢大家耐心观看,刚开始写题解,写的不好,望大佬勿喷!

洛谷CF982B 题解相关推荐

  1. 洛谷p1598题解记录

    洛谷p1598题解记录 对这道题来说,输入几行数据其实无所谓,判定时是按照是否输入EOF来决定输入是否结束的. 代码 #include <stdio.h>char numberCount[ ...

  2. P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序

    传送门: P3387 [模板]缩点 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3387 问题分析 首先为了节省 ...

  3. 洛谷P1001题解--zhengjun

    题目描述 输入两个整数 a,ba,ba,b,输出它们的和(∣a∣,∣b∣≤109|a|,|b |\le 10^9∣a∣,∣b∣≤109). 注意 PascalPascalPascal 使用intege ...

  4. 洛谷P1914题解——(本地测试AC但是交题爆零全WA)使用getchar();

    本题最大的坑在于: windows环境下的换行符为\r\n,linux环境的换行符为\n. 我们再来看看洛谷的部分OJ判题机数据和机制 常见"我在本地/xxOJ AC了.洛谷却不过" ...

  5. 洛谷 [樱花] 题解

    [樱花]题解 题目背景 又到了一年樱花盛开的时节.Vani 和妹子一起去看樱花的时候,找到了一棵大大的樱花树,上面开满了粉红色的樱花.Vani 粗略估计了一下,一共有足足 n!n! 片花瓣. Vani ...

  6. 洛谷P1425python题解

    #P1425 ##题解 s = input().split() a = int(s[0]) b = int(s[1]) c = int(s[2]) d = int(s[3])#total_time = ...

  7. 邮票面值设计java,[洛谷P1021][题解]邮票面值设计

    0.序 偶然被老师强迫刷到了这样一道题,正好亿年没写题解了,来此练练手+摸鱼. 1.概述 基本思路:DFS暴力枚举+DP验证. 先DFS出来一个序列,然后DP出所有面值用到的最少邮票数. 设\(f[i ...

  8. 洛谷P1014题解 [NOIP1999 普及组] Cantor 表

    原文地址:https://luvletter.blog.luogu.org/p1014-ti-jie P1014 [NOIP1999 普及组] Cantor 表 题目描述 现代数学的著名证明之一是 G ...

  9. 洛谷P1017题解 [NOIP2000 提高组] 进制转换

    原文地址:https://luvletter.blog.luogu.org/p1017-ti-jie P1017 [NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制 ...

最新文章

  1. php报表服务器配置,服务器_SQL Server 2008升级报表服务器数据库,报表服务器数据库可以为一个 - phpStudy...
  2. LeetCode 869. 重新排序得到 2 的幂(排序 全排列)
  3. linux ps指令查看进程,linux下查看进程指令-ps
  4. Ubuntu之安装摄像头软件GTK_UVC_Viewer
  5. goreman 多进程管理工具
  6. 【光学】基于matlab光栅衍射仿真【含Matlab源码 502期】
  7. java下载视频_怎么用Java从网上下载一个视频下来
  8. 微信小程序web-view组件 打开外部url
  9. 怎样卸载干净Oracle
  10. SS LSTM全文翻译
  11. 99乘法表c语言竖坐标,99乘法表c语言(c语言九九乘法表原理)
  12. Window平台Git-Bash的主题配置
  13. 微信小程序 MinUI 组件库系列之 price 价格组件
  14. Gluster 常用操作命令
  15. 游戏ui切图,颜色通道_什么是ui通道设计,为什么如此重要
  16. 从认知智能的角度认识ChatGPT的不足
  17. RVM切换ruby版本
  18. LDA模型,获取所有的文档-主题分布(即得到文档对于每个主题的概率分布)并保存
  19. PLC采集网关实现电力行业 DT/L645 接入华为云平台
  20. 使用Go语言交叉编译开发嵌入式Linux应用程序

热门文章

  1. ORL人脸库的遍历及CSV按标准排序
  2. aText for Mac(打字加速器)
  3. 中小企业进销存管理系统的应用价值
  4. 可能是最贴心的MySQL笔记了
  5. 鸿蒙石boss 怎么杀,横少西游各帮派BOSS打法攻略
  6. python实现的人脸识别,中文显示名称
  7. Zebra 打印机 Android 端驱动接口开发及调用案例
  8. 民宿小程序开发解决民宿运营难题
  9. 如何利用UGUI在Unity中实现一个本地排行榜
  10. C语言指针这一篇够了(一万二千字,包含指针与数组,函数指针等详解)