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 ...
随机推荐
- Deployment的使用
RC和RS的功能基本上是差不多的,唯一的区别就是RS支持集合的selector. RC|RS是Kubernetes的一个核心概念,当我们把应用部署到集群之后,需要保证应用能够持续稳定的运行,RC|RS ...
- html input 上capture 参数在 安卓 苹果上的异同
安卓上 <input type="file" accept="image/*" capture="camera"> //只调用相 ...
- C#中反射的基础基础基础
class Program { static void Main(string[] args) { Type t = typeof(Student);//typeof(类) 取类的类型 并且存储在Ty ...
- UDP部分
IP地址:互联网协议地址,计算机的通行证.计算机在网络中的唯一身份标识.桥接:Ubuntu虚拟机 直接连到局域网NAT:网络地址转换点分十进制:192.168.14.115IP地址通常为4个字节,简称 ...
- 任意两点间的最短路问题(Floyd-Warshall算法)
/* 任意两点间的最短路问题(Floyd-Warshall算法) */ import java.util.Scanner; public class Main { //图的顶点数,总边数 static ...
- Java中JNI的使用详解第五篇:C/C++中操作Java中的数组
在Java中数组分为两种: 1.基本类型数组 2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLength(ja ...
- 57 CUDA 编程入门
0 引言 由于毕设用到了Marvin,采用的是CUDA框架作为加速器,正好借此学习一下CUDA编程的一些基本知识. 各个版本的cuda的下载链接如下. https://developer.nvidia ...
- web前端开发2018年12月找工作总结
2018年的冬天额外的冷,由内致外... 作为一名刚刚踏入社会的实习生,可谓是狠狠的体验了一把什么叫社会(同时也感叹父母赚钱真的很不容易) 前几天看见这样一句话"如果你不知道社会的辛苦,要么 ...
- NX二次开发-UFUN高亮显示对象UF_DISP_set_highlight
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_disp.h> UF_initializ ...
- mac 安装并使用 mysql 或者 mac mysql 忘记密码,Can't connect to local MySQL server through socket homebrew
1. brew install mysql 2. 启动mysql mysql.server start 我遇到了这个error,查openstack解决,我在这粘一下 ### Error:Can't ...