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. python五子棋

    以后不更新了,把以前的一些东西发出来. 这是一个命令行环境的五子棋程序.使用了minimax算法. 除了百度各个棋型的打分方式,所有代码皆为本人所撸.本程序结构与之前的井字棋.黑白棋一模一样. 有一点 ...

  2. 【C#复习总结】多线程编程

    1 基本概念 前一篇文章做了铺垫,详见:http://www.cnblogs.com/mhq-martin/p/9035640.html 2 多线程 多线程的优点:可以同时完成多个任务:可以使程序的响 ...

  3. SQL Server 使用 Merge 关键字进行表数据同步

    简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根 ...

  4. C. Edgy Trees

    链接 [https://codeforces.com/contest/1139/problem/C] 题意 给你n个点,n-1个边,无向的.有red和black的. k表示经过这k个点.可以跨其他点 ...

  5. ImportError: DLL load failed: 找不到指定的模块。

    这里用的anacoda,报错是找不到DLL,可能是该DLL的环境变量没配置,配置系统环境变量: 重启一下pycharm,OK.

  6. Selenium库

    '''自动化测试工具,支持多种浏览器.爬虫中主要用来解决JavaScrip渲染的问题.''''''基本使用'''from selenium import webdriverfrom selenium. ...

  7. Redis集群搭建过程

    我在搭建Redis集群过程中遇到了一些问题,现记录下来. Redis搭建需要在系统中安装好ruby.gem.zlib等工具,可参考https://www.cnblogs.com/wuxl360/p/5 ...

  8. 软件工程(FZU2015) 赛季得分榜,第二回合

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...

  9. Json详解以及fastjson使用教程

    Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言.在使用Java做Web开发时,不可避免的会遇到Json的使 ...

  10. [转帖]HTTP 头部解释

    HTTP 头部解释 https://www.cnblogs.com/poissonnotes/p/4844014.html 之前看的太粗了 同事闻起来 referer 才知道自己所知甚少.. ==== ...