洛谷CF982B 题解
谢谢管理员大大给过
优先队列速通大法
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 题解相关推荐
- 洛谷p1598题解记录
洛谷p1598题解记录 对这道题来说,输入几行数据其实无所谓,判定时是按照是否输入EOF来决定输入是否结束的. 代码 #include <stdio.h>char numberCount[ ...
- P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序
传送门: P3387 [模板]缩点 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3387 问题分析 首先为了节省 ...
- 洛谷P1001题解--zhengjun
题目描述 输入两个整数 a,ba,ba,b,输出它们的和(∣a∣,∣b∣≤109|a|,|b |\le 10^9∣a∣,∣b∣≤109). 注意 PascalPascalPascal 使用intege ...
- 洛谷P1914题解——(本地测试AC但是交题爆零全WA)使用getchar();
本题最大的坑在于: windows环境下的换行符为\r\n,linux环境的换行符为\n. 我们再来看看洛谷的部分OJ判题机数据和机制 常见"我在本地/xxOJ AC了.洛谷却不过" ...
- 洛谷 [樱花] 题解
[樱花]题解 题目背景 又到了一年樱花盛开的时节.Vani 和妹子一起去看樱花的时候,找到了一棵大大的樱花树,上面开满了粉红色的樱花.Vani 粗略估计了一下,一共有足足 n!n! 片花瓣. Vani ...
- 洛谷P1425python题解
#P1425 ##题解 s = input().split() a = int(s[0]) b = int(s[1]) c = int(s[2]) d = int(s[3])#total_time = ...
- 邮票面值设计java,[洛谷P1021][题解]邮票面值设计
0.序 偶然被老师强迫刷到了这样一道题,正好亿年没写题解了,来此练练手+摸鱼. 1.概述 基本思路:DFS暴力枚举+DP验证. 先DFS出来一个序列,然后DP出所有面值用到的最少邮票数. 设\(f[i ...
- 洛谷P1014题解 [NOIP1999 普及组] Cantor 表
原文地址:https://luvletter.blog.luogu.org/p1014-ti-jie P1014 [NOIP1999 普及组] Cantor 表 题目描述 现代数学的著名证明之一是 G ...
- 洛谷P1017题解 [NOIP2000 提高组] 进制转换
原文地址:https://luvletter.blog.luogu.org/p1017-ti-jie P1017 [NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制 ...
最新文章
- php报表服务器配置,服务器_SQL Server 2008升级报表服务器数据库,报表服务器数据库可以为一个 - phpStudy...
- LeetCode 869. 重新排序得到 2 的幂(排序 全排列)
- linux ps指令查看进程,linux下查看进程指令-ps
- Ubuntu之安装摄像头软件GTK_UVC_Viewer
- goreman 多进程管理工具
- 【光学】基于matlab光栅衍射仿真【含Matlab源码 502期】
- java下载视频_怎么用Java从网上下载一个视频下来
- 微信小程序web-view组件 打开外部url
- 怎样卸载干净Oracle
- SS LSTM全文翻译
- 99乘法表c语言竖坐标,99乘法表c语言(c语言九九乘法表原理)
- Window平台Git-Bash的主题配置
- 微信小程序 MinUI 组件库系列之 price 价格组件
- Gluster 常用操作命令
- 游戏ui切图,颜色通道_什么是ui通道设计,为什么如此重要
- 从认知智能的角度认识ChatGPT的不足
- RVM切换ruby版本
- LDA模型,获取所有的文档-主题分布(即得到文档对于每个主题的概率分布)并保存
- PLC采集网关实现电力行业 DT/L645 接入华为云平台
- 使用Go语言交叉编译开发嵌入式Linux应用程序