AcWing 113. 特殊排序
有关数据
| \(\texttt{Time Limit}\) | \(\texttt{Memory Limit}\) | \(\texttt{Difficulty}\) |
|---|---|---|
| \(\color{green}{\texttt{1 sec}}\) | \(\color{red}{\texttt{64 MB}}\) | \(\color{blue}{\texttt{Easy}}\) |
题目大意
有 \(N\) 个元素,编号 \(1,2\cdots,N\),每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。
注意:不存在两个元素大小相等的情况。
也就是说,元素的大小关系是 \(N\) 个点与 \(\frac{N\times(N−1)}{2}\) 条有向边构成的任意有向图。
然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过 \(10000\) 次提问来获取信息,每次提问只能了解某两个元素之间的关系。
将 ¥N¥ 个元素排好序后,把他们的编号以数组的形式输出,如果答案不唯一,则输出任意一个均可。
提示
- \(1 \leq N \leq 1000\)
解法分析
这道题我们采用二分。
首先,考虑归纳法。如果已经确定了前 \(k-1\) 个元素的大小关系,那么对于第 \(k\) 个数,我们可以尝试二分。
因为前 \(k-1\) 个数是单调递增的,所以二分前 \(k-1\) 个数。如果小于,往上区间走;否则,往下区间走。这样,总的询问次数是 \(n\log{n}\),题目可以接受。
至此,我们做出了这一题。
至于为什么二分一定能搜到……?这需要说吗?
AC Code
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB push_back
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
// Forward declaration of compare API.
// bool compare(int a, int b);
// return bool means whether a is less than b.
class Solution {
public:
vector<int> specialSort(int n) {
vector <int> ans;
ans.PB(1);
GO (i, 2, n){
int l = 1, r = i - 1;
int pos = 0;
while (l <= r){
int mid = (l + r) >> 1;
bool res = compare(ans[mid - 1], i);
if (res){
pos = mid;
l = mid + 1;
}
else r = mid - 1;
}
ans.insert(ans.begin() + pos, i);
}
return ans;
}
};
AcWing 113. 特殊排序的更多相关文章
- 【AcWing 113】【交互】特殊排序——二分
(题面来自AcWing) 有N个元素,编号1.2..N,每一对元素之间的大小关系是确定的,关系不具有传递性. 也就是说,元素的大小关系是N个点与N*(N-1)/2条有向边构成的任意有向图. 然而,这是 ...
- [AcWing 862] 三元组排序
点击查看代码 #include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + ...
- AcWing 153. 双栈排序
https://www.acwing.com/problem/content/155/ #include <cstring> #include <iostream> #incl ...
- AcWing:164. 可达性统计(拓扑排序 + 状态压缩算法)
给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...
- Acwing 1927 自动补全(知识点:hash,二分,排序)
读完题目第一想法是trie树 ,不过好像没怎么做过trie树的题,看y总给的知识点是二分排序,所以就有了如下思路: 但是但是,看完其他题解之后才坚定了我的想法,原来真的是这样排序,暴力啊! 具体步骤 ...
- 《SQL 进阶教程》 case:练习题1-1-3 用 ORDER BY 指定顺序进行排序
select name from greatestsORDER BY case when name ='B' then 1 when name ='A' then 2 when name ='D' t ...
- AcWing 217. 绿豆蛙的归宿 (概率期望+拓扑排序)打卡
给出一个有向无环的连通图,起点为1,终点为N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离 ...
- [AcWing 36] 合并两个排序的链表
点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...
- SQL SERVER修改排序规则——脚本篇
在上篇MS SQL 排序规则总结中,大致就数据库服务器排序规则(或者叫数据库实例排序规则).数据库排序规则.列的排序规则粗浅的叙说了一遍,重点讲述了修改数据库服务器排序规则(数据库实例排序规则),其中 ...
- JS写的排序算法演示
看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http:/ ...
随机推荐
- 『Plotly实战指南』--Plotly与Streamlit结合实战
关于Streamlit的介绍,可参考<玩转Streamlit>系列 在当今数据驱动的时代,快速构建交互式工具并直观地将数据分析结果交付给用户,已成为数据应用开发的核心需求. 无论是企业内部 ...
- NOIP模拟赛(10.17):语言,色球,斐波,偶数
语言 题面: 牛妹正在学习一种新的语言,在这种语言里,单词只有形容词(\(\texttt{A}\)),名词(\(\texttt{N}\))和动词(\(\texttt{V}\))三种词性.但是一个单词可 ...
- 操作系统:设备I/O -- 如何在内核中注册设备?
在上节课里,我们对设备进行了分类,建立了设备与驱动的数据结构,同时也规定了一个驱动程序应该提供哪些标准操作方法,供操作系统内核调用.这相当于设计了行政部门的规章制度,一个部门叫什么,应该干什么,这些就 ...
- win10系统 wsappx消耗内存导致死机
问题描述:win10系统开机后,wsappx内存占用率一路飙升,直至电脑蓝屏,手动kill后,过一会死灰复燃. 问题解决:win+R输入 regedit 跳转注册表编辑器,找到 HKEY_LOCAL_ ...
- MySQL 生成随机字符串 uuid
MySQL 使用函数 uuid()可以生成随机字符串,方法如下: select replace(uuid(),"-","") as uuid; 最后,楼 ...
- Java 下载网络资源
从网络URL下载文件到指定目录,自适应文件类型,并且重命名下载后的文件名.这里使用XtremePapers如下URL的网络资源作为测试文件: https://papers.xtremepape.rs/ ...
- cmake基础知识
Cmake Cmake变量 Cmake的基本类型只有两种,分别是字符串和字符串列表,使用set命令来设置变量 set(var abc) # abc是字符串,var是值为"abc"的 ...
- 【语义分割专栏】3:Segnet原理篇
目录 前言 背景介绍 Segnet核心剖析 池化索引(pooling Indices) 其他细节 编码器解码器的对称结构 Segnet模型代码 结语 参考资料 前言 本篇文章收录于语义分割专栏,如果对 ...
- SonarQube的使用
一.简单介绍 SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味.它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查,在很多企业中都会使用到,进行 ...
- AI应用实战课学习总结(11)用RNN做时序预测
大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第11站,一起了解RNN循环神经网络的基本概念 以及 通过RNN来做时序 ...