有关数据

\(\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. 特殊排序的更多相关文章

  1. 【AcWing 113】【交互】特殊排序——二分

    (题面来自AcWing) 有N个元素,编号1.2..N,每一对元素之间的大小关系是确定的,关系不具有传递性. 也就是说,元素的大小关系是N个点与N*(N-1)/2条有向边构成的任意有向图. 然而,这是 ...

  2. [AcWing 862] 三元组排序

    点击查看代码 #include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + ...

  3. AcWing 153. 双栈排序

    https://www.acwing.com/problem/content/155/ #include <cstring> #include <iostream> #incl ...

  4. AcWing:164. 可达性统计(拓扑排序 + 状态压缩算法)

    给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...

  5. Acwing 1927 自动补全(知识点:hash,二分,排序)

    读完题目第一想法是trie树 ,不过好像没怎么做过trie树的题,看y总给的知识点是二分排序,所以就有了如下思路: 但是但是,看完其他题解之后才坚定了我的想法,原来真的是这样排序,暴力啊! 具体步骤 ...

  6. 《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 ...

  7. AcWing 217. 绿豆蛙的归宿 (概率期望+拓扑排序)打卡

    给出一个有向无环的连通图,起点为1,终点为N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离 ...

  8. [AcWing 36] 合并两个排序的链表

    点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...

  9. SQL SERVER修改排序规则——脚本篇

    在上篇MS SQL 排序规则总结中,大致就数据库服务器排序规则(或者叫数据库实例排序规则).数据库排序规则.列的排序规则粗浅的叙说了一遍,重点讲述了修改数据库服务器排序规则(数据库实例排序规则),其中 ...

  10. JS写的排序算法演示

    看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http:/ ...

随机推荐

  1. SpringBoot中的拦截器江湖

    前言 很多小伙伴在工作中遇到拦截需求就无脑写HandlerInterceptor,结果被复杂场景搞得鼻青脸肿. 作为一名有多年开发经验的程序员,今天领大家到SpringBoot的山头认认6把交椅: 这 ...

  2. 原生JS表格数据常用总结

    主要是在数据报表这块, 做了好几年发现, 其实用户最终想要看的并不是酷炫的BI大屏, 而是最基础也是最复杂的 中国式报表. 更多就是倾向于从表格中去获取数据信息, 最简单的就是最好的, 于是还是来总结 ...

  3. Python基础 - 多线程(上)

    前面对 进程 一点认识, 通俗理解, 进程是操作系统(OS)进行资源调度分配的基本单元. 每个程序的至少就一个进程在OS中被"监控"着的哦. 然后围绕着多进程, 用消息队列共享全局 ...

  4. DNSPY调试引用dll

    (1) 点击"调试",选择需要调试的可执行程序 (2) 点击"确定"后,打开程序,再点击"调试"-"窗口"-模块 (3) ...

  5. C#之使用线程池

    简述 创建线程是昂贵的操作,所以为每个短暂的异步操作创建线程会产生显著的开销,线程池就是该问题的解决方案,我们事先分配一定的资源,将这些资源放入资源池,每次需要新的资源,只需从池中获取一个,而不用创建 ...

  6. 红杉AI闭门会:AI 不再卖工具,而是卖收益

    AI创业失败,经验教训分享可私聊... 近来,AI圈最值得关注的应该是在旧金山召开的红杉资本AI峰会. 敏感的同学会清楚,钱在哪里,哪里就有发展,如果能迎合资本市场,那就有可能活得很好,所以我们今天就 ...

  7. WPF 的 await Application.Current.Dispatcher.InvokeAsync,Func 如果是Task , 等待赋值可能存在没有等待执行完成的问题

    最近在检查我们组内的代码,发现好多用到 await Application.Current.Dispatcher.InvokeAsync 相信好多WPF的开发都会用到 该方法做UI线程切换.但是细看里 ...

  8. algolia使用配置教程-为SSG静态站增加algolia搜索功能

    要构建SSG静态站点时,一般为了方便增加algolia搜索框,但这里algolia配置使用时用很多的坑,折腾了我好几天,网上没有一个可用的教程. 自己弄了几天,终于搞明白里面的道道了,现在分享出来给大 ...

  9. dify打造数据可视化图表

    一.概述 在日常工作和学习中,我们经常需要和数据打交道.无论是分析报告.项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语. 一款能让数据可视化变得超级简单的 MCP Server, ...

  10. python 获取mac地址

    python 获取mac地址 方法一:使用socket库 使用了socket库中的ioctl函数和fcntl模块来获取MAC地址 import socket import fcntl import s ...