CCPC 2019 网络赛 1006 Shuffle Card
// 签到题,比赛时候写双向链表debug了半天,发现有更好方法,记录一下。
Shuffle Card HDU 6707
题意:
有一 \(n\) 张卡片,编号 \(1~n\) ,给定初始编号排列和 \(m\) 次操作,每次操作将编号为 \(s_i\) 的卡片放到第一张上面。求最后卡片的编号序列。
思路:
直接想法就是模拟,复杂度 \(O(nm)\) ,会T掉。如果采用双向链表储存编号,每次洗牌操作复杂度都是 \(O(1)\) ,总复杂度\(O(m)\),可行。比赛时候写链表少连了一条边调了半天
双向链表交换两个节点太麻烦了,今天发现可以直接用栈,输出序列标出上面已拿出的卡片编号即可,复杂度 \(O(n+m)\) 。
AC代码1:
// 栈实现
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 100010;
bool vis[maxn];
int arr[maxn];
vector<int> S;
int main() {
int n, m;
cin>>n>>m;
for(int i=0;i<n;i++) {
scanf("%d", &arr[i]);
}
for(int i=n-1;i>=0;i--) {
S.push_back(arr[i]);
}
while(m--) {
int card; scanf("%d", &card);
S.push_back(card);
}
int left = n;
while(!S.empty() && left) {
int now = *--S.end();
if(!vis[now]) {
printf("%d ", now);
vis[now] = 1;
--left;
}
S.pop_back();
}
return 0;
}
AC代码1:
// 双向链表实现
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 100010;
struct node {
int pre, next;
}cards[maxn];
int head;
int arr[maxn];
int main() {
int n, m;
cin>>n>>m;
for(int i=1;i<=n;i++) {
scanf("%d", &arr[i]);
}
head = arr[1];
cards[arr[1]].pre = -1;
cards[arr[n]].next = -1;
for(int i=1;i<n;i++) {
cards[arr[i]].next = arr[i+1];
cards[arr[i+1]].pre = arr[i];
}
while(m--) {
int c; scanf("%d", &c);
if(c==head) continue;
int h = c; // 新的头结点
int pre = cards[c].pre;
int next = cards[c].next;
if(pre!=-1)
cards[pre].next = next;
if(next!=-1)
cards[next].pre = pre;
cards[c].next = head;
cards[head].pre = c; // 别忘了这一行!!!
cards[c].pre = -1;
head = c;
}
int p = head;
while(p!=-1) {
printf("%d ", p);
p = cards[p].next;
}
return 0;
}
CCPC 2019 网络赛 1006 Shuffle Card的更多相关文章
- CCPC 2019 网络赛 1002 array (权值线段树)
HDU 6703 array 题意: 给定一个数组 \(a_1,a_2, a_3,...a_n\) ,满足 \(1 \le a[i]\le n\) 且 \(a[i]\) 互不相同. 有两种 ...
- CCPC 2019 网络赛 HDU huntian oy (杜教筛)
1005 huntian oy (HDU 6706) 题意: 令,有T次询问,求 f(n, a, b). 其中 T = 10^4,1 <= n,a,b <= 1e9,保证每次 a,b互质. ...
- 大连网络赛 1006 Football Games
//大连网络赛 1006 // 吐槽:数据比较水.下面代码可以AC // 但是正解好像是:排序后,前i项的和大于等于i*(i-1) #include <bits/stdc++.h> usi ...
- 16年大连网络赛 1006 Football Games
题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?cid=725&pid=1006 Football Games Time ...
- 2017ICPC沈阳网络赛 HDU 6205 -- card card card(最大子段和)
card card card Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?
题意:给定一个由小写字母组成的长度为 n 的字符串,首尾相连,可以从任意一个字符开始,顺时针或逆时针取这个串(长度为 n),求一个字典序最大的字符串的开始字符位置和顺时针或逆时针.如果有多个字典序最大 ...
- Subsequence Count 2017ccpc网络赛 1006 dp+线段树维护矩阵
Problem Description Given a binary string S[1,...,N] (i.e. a sequence of 0's and 1's), and Q queries ...
- 【赛后总结+部分题解】2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
赛后总结: T:今天状态一般,甚至有点疲惫.然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂.然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007. ...
- HDU 4764 Stone (2013长春网络赛,水博弈)
Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- 如何在Windows10操作系统下安装superset步骤分享
superset是一个轻量级自助式BI框架,以优雅的界面和根据数据表动态生成数据为主要特点. 一. 环境 windows 10 64位 Python 3.7 二. 安装步骤 安装Python 建议安装 ...
- SQL优化之慢查询和explain以及性能分析
性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 使用explain去查看该sql的执行计划 使用show profile去查看该sql执行时的性能问题 MySQL性能优化 ...
- 2017-3-8 html基础标签
<head></head>头标签 <title>页面标签</title> <body>文档的内容可在浏览器中显视的</body> ...
- BZOJ 4031: [HEOI2015]小Z的房间(Matrix Tree)
传送门 解题思路 矩阵树定理模板题.矩阵树定理是求图中最小生成树个数,做法是首先求出基尔霍夫矩阵,就是度数矩阵\(-\)邻接矩阵.然后再求出这个矩阵的行列式,行列式的求法就是任意去掉一行一列,然后高斯 ...
- NX-二次开发创建圆弧(三点圆弧)UF_CURVE_create_arc_3point
NX9+VS2012 #include <uf.h> #include <uf_curve.h> UF_initialize(); //起点 ]; ArcStartPoint[ ...
- NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options
文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...
- NX二次开发-NXOPEN设置工程图表格注释字体workPart->Fonts()->AddFont("chinesef_fs", NXOpen::FontCollection::TypeNx);
NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...
- csp-s模拟测试98
csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...
- Dll注入技术之ComRes注入
DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...
- spark自定义函数之——UDF使用详解及代码示例
前言 本文介绍如何在Spark Sql和DataFrame中使用UDF,如何利用UDF给一个表或者一个DataFrame根据需求添加几列,并给出了旧版(Spark1.x)和新版(Spark2.x)完整 ...