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的更多相关文章

  1. bzoj 2093 [ Poi 2010 ] Frog —— 滑动窗口 + 倍增

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2093 先处理出每个点第一次会跳到哪里: 开一个长度为 K+1 的窗口(因为第一近的实际是自己 ...

  2. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  3. BZOJ 2083: [Poi2010]Intelligence test [vector+二分]

    2083: [Poi2010]Intelligence test Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 469  Solved: 227[Su ...

  4. BZOJ 2083: [Poi2010]Intelligence test

    Description 问一个序列是不是起始序列的子序列. Sol 二分. 直接维护每个数出现的位置,二分一个最小的就行. Code /******************************** ...

  5. bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 给每个值开一个vector.每个询问挂在其第一个值上:然后枚举给定序列,遇到一个值就访 ...

  6. bzoj 2083 Intelligence test —— 思路+vector

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 先把所有子序列都存下来,总长度应该有限制,所以用 vector 存: 要做到 O(n) ...

  7. BZOJ 2083 Intelligence test

    用vector,二分. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

  8. bzoj 2083: [Poi2010]Intelligence test——vecto+二分

    Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...

  9. BZOJ 2083 vector的巧用+二分

    2083: [Poi2010]Intelligence test Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 469  Solved: 227[Su ...

随机推荐

  1. 使用Windows Live Writer撰写的第一篇博文

    一直没有时间,在自己的电脑上配置起来Windows Live Writer. 今天抽时间搞起来后,感觉果然比在Web版写作不知道爽多少倍哦. 还安装了代码插件,上传代码和图片也方便了很多,霸气. 先上 ...

  2. JFrame2

    package com.fxb.gui; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.TextFie ...

  3. Git 使用vi或vim命令打开、关闭、保存文件

    1 vi & vim 有两种工作模式: (1)命令模式:接受.执行 vi & vim 操作命令的模式,打开文件后的默认模式: (2)编辑模式:对打开的文件内容进行 增.删.改 操作模式 ...

  4. Python-os模块-60

    os 模块: 和操作系统打交道的模块 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirna ...

  5. ICPC青岛站网络赛-C-高效模拟

    嗯这道辣鸡题,当时我队友写了错误的代码,我稍微改动了,思路基本上是对了,但是就是超时,我第一直觉是我这个算法思路是没有任何问题的,但是就是TLE,我感觉这个算法已经优化的不能再优化了啊...后面就怀疑 ...

  6. Codeforces Round #486 (Div. 3)-B. Substrings Sort

    B. Substrings Sort time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  7. Elasticsearch - 简单介绍

    Elasticsearch 简介 1. 什么是 Elasticsearch ElasticSearch 是一个基于 Lucene 的搜索服务器. 它了一个分布式多 用户能力的全文搜索引擎,能够达到实时 ...

  8. scrapy之五大核心组件

    scrapy之五大核心组件 scrapy一共有五大核心组件,分别为引擎.下载器.调度器.spider(爬虫文件).管道. 爬虫文件的作用: a. 解析数据 b. 发请求 调度器: a. 队列 队列是一 ...

  9. Python_面向对象基础

    概念 类 一类抽象的事物,是描述了一类事物有哪些属性或者行为,但不是具体——模子. 实例 一个依托于类的规范存在的,被赋予了具体属性值的实际存在的物体. 对象 就是实例,实例的另外一个名称,相当于别名 ...

  10. CI框架在控制器中切换读写库和读写库

    CodeIgniter框架版本:3.1.7 ,php版本:5.6.* ,mysql版本:5.6 在Ci框架中,可以在application/config/database.php中配置多个group, ...