[BZOJ 2083] [POI 2010] Intelligence test
Description
霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列。Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算做很多练习,所以他希望你写一个程序来快速判断他的答案是否正确。
Input
第一行为一个整数 \(m\);
第二行包括 \(m\) 个用空格分开的整数 \(a_i\),组成了最初的序列;
第三行为一个整数 \(n\),表示 \(n\) 个Lyx经过一系列删除得到的序列,每个序列两行,第一行给出长度 \(L\),然后下一行为 \(L\) 个由空格分开的整数 \(b_i\)。
Output
共 \(n\) 行,如果Lyx的序列确实是由最初的序列删除一些数得到,就输出TAK,否则输出NIE。
Sample Input
7
1 5 4 5 7 8 6
4
5
1 5 5 8 6
3
2 2 2
3
5 7 8
4
1 5 7 4
Sample Output
TAK
NIE
TAK
NIE
HINT
\(1\le n,m,a_i,b_i,\sum L \le 10^6\)
Solution
建立链表,其中 \(head[i]\) 这条链记录当前需要匹配的数字为 \(i\) 的序列编号。
比如样例,刚开始时 \(head[1]\) 所引出的链记录 \(1\) 和 \(4\),弹掉 \(1\) 和 \(4\) 后,\(head[5]\) 所引出的链记录 \(3,1,4\)。
注意代码中加注释的那一行不能直接 \(push\),因为如果 \(a=\{5,1,2,3,4\},b=\{5,5,5,5,5\}\),弹掉 \(b\) 中的第一个 \(5\) 后直接 \(push\) 下一个 \(5\),会导致这几个 \(5\) 全都与 \(a\) 中的第一个 \(5\) 相匹配,从而输出TAK。
时间复杂度 \(O(n)\)。
Code
#include <cstdio>
const int N = 1000005;
int n, m, a[N], q[N][2];
struct List {
int h[N], t[N], cnt, sta[N], top;
struct Edge { int v, nxt; } e[N];
void push(int u, int v) {
int i = top ? sta[top--] : ++cnt;
if (!t[u]) h[u] = i; else e[t[u]].nxt = i;
t[u] = i, e[i].v = v;
}
void pop(int u) {
sta[++top] = h[u], h[u] = e[h[u]].nxt, e[sta[top]].nxt = 0;
if (!h[u]) t[u] = 0;
}
} b, c;
int read() {
int x = 0; char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
return x;
}
int main() {
int m = read();
for (int i = 1; i <= m; ++i) a[i] = read();
int n = read();
for (int i = 1; i <= n; ++i) {
int l = read();
for (int j = 1; j <= l; ++j) b.push(i, read());
c.push(b.e[b.h[i]].v, i);
}
for (int i = 1; i <= m; ++i) {
int t = 0;
while (c.h[a[i]]) {
int j = c.e[c.h[a[i]]].v;
b.pop(j), c.pop(a[i]);
if (b.h[j]) q[++t][0] = b.e[b.h[j]].v, q[t][1] = j; //不能直接push
}
for (int j = 1; j <= t; ++j) c.push(q[j][0], q[j][1]);
}
for (int i = 1; i <= n; ++i) puts(b.h[i] ? "NIE" : "TAK");
return 0;
}
[BZOJ 2083] [POI 2010] Intelligence test的更多相关文章
- bzoj 2093 [ Poi 2010 ] Frog —— 滑动窗口 + 倍增
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2093 先处理出每个点第一次会跳到哪里: 开一个长度为 K+1 的窗口(因为第一近的实际是自己 ...
- [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)
[BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...
- BZOJ 2083: [Poi2010]Intelligence test [vector+二分]
2083: [Poi2010]Intelligence test Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 469 Solved: 227[Su ...
- BZOJ 2083: [Poi2010]Intelligence test
Description 问一个序列是不是起始序列的子序列. Sol 二分. 直接维护每个数出现的位置,二分一个最小的就行. Code /******************************** ...
- bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 给每个值开一个vector.每个询问挂在其第一个值上:然后枚举给定序列,遇到一个值就访 ...
- bzoj 2083 Intelligence test —— 思路+vector
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 先把所有子序列都存下来,总长度应该有限制,所以用 vector 存: 要做到 O(n) ...
- BZOJ 2083 Intelligence test
用vector,二分. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- bzoj 2083: [Poi2010]Intelligence test——vecto+二分
Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...
- BZOJ 2083 vector的巧用+二分
2083: [Poi2010]Intelligence test Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 469 Solved: 227[Su ...
随机推荐
- java多线程 - 处理并行任务
在多线程编程过程中,遇到这样的情况,主线程需要等待多个子线程的处理结果,才能继续运行下去.个人给这样的子线程任务取了个名字叫并行任务.对于这种任务,每次去编写代码加锁控制时序,觉得太麻烦,正好朋友提到 ...
- 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!
前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...
- 重构JS代码 - 让JS代码平面化
js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url', jsonObj, function ...
- HBase篇(3)-架构详解
[每日五分钟搞定大数据]系列,HBase第三篇 聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图 角色与职责 先介绍 ...
- 07 YAPI/基础设施 - DevOps之路
07 YAPI/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 简介 YApi 是一个可本地部署的. ...
- 从 0 到 1 实现 React 系列 —— 2.组件和 state|props
看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...
- Python入门-格式化输出
需求:将用户的姓名.年龄.工作.爱好 ,然后打印成以下格式: ------------ Info of Tom ------ Name : Tom Age : 22 Job : Teacher Hob ...
- PAT L2-023 图着色问题
https://pintia.cn/problem-sets/994805046380707840/problems/994805057298481152 图着色问题是一个著名的NP完全问题.给定无向 ...
- Python3练习题 026:求100以内的素数
p = [i for i in range(2,100)] #建立2-99的列表 for i in range(3,100): #1和2都不用判断,从3开始 for j in range(2, ...
- Jmeter使用笔记之html报告扩展(一)
题记:在用loadrunner的时候可以生成一个HTML的报告,并且里面包含各种图表,各种详细的数据.而在使用Jmeter测试完后并不能直接生成Html 的报告(无论是用GUI还是命令行启动). 经过 ...