牛客网多校第4场 J Hash Function 【思维+并查集建边】
题目链接:戳这里
学习博客:戳这里
题意:
有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的。
现在给一个已经放过数的状态,求放数字的顺序。(要求字典序最小
解题思路:
用一个优先队列。如果序列里的x的位子就是x%n,证明这个数是最开始就放好的。加入优先队列。
每次出一个最小元素。把它填入位子a,然后用并查集把a和a+1合并,看看现在a的祖先能不能被加入队列。
用优先队列维护很容易想到,关键是怎么维护选出的数的位置,这里用并查集建边很巧妙的解决了这个问题。
附ac代码:
1 #include<iostream>
2 #include<algorithm>
3 #include<stdio.h>
4 #include<string.h>
5 #include<string>
6 #include <cmath>
7 #include <vector>
8 #include <queue>
9 using namespace std;
10 typedef long long ll;
11 const ll mod = 1e9 + 7;
12 const int maxn = 2e6 + 10;
13 int pre[maxn];
14 int nu[maxn];
15 int ans[maxn];
16 bool vis[maxn];
17
18 struct nod
19 {
20 int pos;
21 int val;
22 nod(){};
23 nod(int x, int y)
24 {
25 pos = x;
26 val = y;
27 }
28 bool friend operator < (nod a, nod b)
29 {
30 return a.val > b.val;
31 }
32
33 };
34 void init(int n)
35 {
36 for(int i = 0; i <= n; ++i)
37 pre[i] = i;
38 }
39 int find(int x)
40 {
41 if(pre[x] == x) return x;
42 else return pre[x] = find(pre[x]);
43 }
44 int main()
45 {
46 int t;
47 scanf("%d", &t);
48 int n;
49 while(t--)
50 {
51 int cnt = 0;
52 int len = 0;
53 scanf("%d", &n);
54
55 priority_queue<nod>q;
56 memset(vis, 0, sizeof(vis));
57 init(n);
58 for(int i = 0; i < n; ++i)
59 {
60 scanf("%d", &nu[i]);
61 }
62 for(int i = 0; i < n; ++i)
63 {
64 if(nu[i] == -1) continue;
65 ++cnt;
66 if(nu[i] % n == i)
67 {
68 q.push(nod(i, nu[i]));
69 vis[i] = 1;
70 }
71 }
72
73 while(!q.empty())
74 {
75 nod u = q.top(); q.pop();
76 ans[++len] = u.val;
77 int to = pre[find(u.pos)] = find((u.pos + 1) % n);
78 if(vis[to] || nu[to] == -1 || find(nu[to]%n) != to) continue;
79 q.push(nod(to, nu[to]));
80 vis[to] = 1;
81 }
82 if(len != cnt)
83 {
84 puts("-1");
85 continue;
86 }
87
88 for(int i = 1; i <= len; ++i)
89 {
90 if(i > 1) printf(" ");
91 printf("%d", ans[i]);
92 }
93 printf("\n");
94 }
95 }
牛客网多校第4场 J Hash Function 【思维+并查集建边】的更多相关文章
- 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)
链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...
- 牛客网多校第7场 J Sudoku Subrectangles 【构造】
题目:戳这里 题意:给一个n*m的矩阵,里面由a~z及A~Z构成,问有多少个子矩阵满足任意一行或一列中都没有相同的字母. 解题思路:左上角和右下角两点可以确定一个矩阵.可以先预处理出来每个点作为一个矩 ...
- 牛客网多校第5场 F take 【思维+数学期望】
题目:戳这里 思路来源:视频讲解 题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期 ...
- 牛客多校第四场 J.Hash Function(线段树优化建图+拓扑排序)
题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{ ...
- 牛客网多校第3场C-shuffle card 平衡树或stl(rope)
链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...
- 牛客网多校第3场Esort string (kmp)
链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...
- 牛客网多校赛第九场A-circulant matrix【数论】
链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校训练第二场D Kth Minimum Clique
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...
- 牛客网多校第5场 H subseq 【树状数组+离散化】
题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...
随机推荐
- go语言循环变量
阅读go语言圣经第五章第六节介绍到了捕获迭代变量 package main import ( "fmt" ) func main() { var lis []func() for ...
- 一文读懂k8s之Pod安全策略
导读 Pod容器想要获取集群的资源信息,需要配置角色和ServiceAccount进行授权.为了更精细地控制Pod对资源的使用方式,Kubernetes从1.4版本开始引入了PodSecurityPo ...
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 【Android】报错 Please ensure Hyper-V is disabled in Windows Features, or refer to the Intel HAXM 的解决方案
参考文章 实测华为锐龙本(adm yes)安装Android avd虚拟机教程 环境 Android Studio 3.6; Windows 1909; AMD Ryzen 4800U with Ra ...
- 深度学习DeepLearning技术实战(12月18日---21日)
12月线上课程报名中 深度学习DeepLearning(Python)实战培训班 时间地点: 2020 年 12 月 18 日-2020 年 12 月 21日 (第一天报到 授课三天:提前环境部署 电 ...
- uni-app开发经验分享八: 实现微信APP支付的全过程详解
背景 最近项目使用uni-app实现微信支付,把过程简单记录下,帮助那些刚刚基础uni-app,苦于文档的同学们.整体来说实现过程和非uni-app的实现方式没有太大不同,难点就在于uni-app对于 ...
- Ubuntu安装记录
好吧,这成功地让我想起了那些边肯红薯边黑苹果的早晨······ 本人纯属Windows用腻,后期请大佬多多指教 前面因为没U盘而碰壁的内容在此不说,接下来因为太兴奋,关于安装U盘制作没记录什么.最终, ...
- java之 Request
0x01.Request 什么是request 在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息. ...
- 都知道Base64,Base32你能实现吗?
很长时间没有更新个人博客了,因为前一段时间在换工作,入职了一家新的公司,刚开始需要适应一下新公司的节奏,开始阶段也比较忙.新公司还是有一定的技术气氛的,每周都会有技术分享,而且还会给大家留一些思考题, ...
- 04. struts2中Result配置的各种视图转发类型
概述 <action name="helloworld" class="com.liuyong666.action.HelloWorldAction"&g ...