bzoj 2083 Intelligence test —— 思路+vector
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083
先把所有子序列都存下来,总长度应该有限制,所以用 vector 存;
要做到 O(n),就得遍历原序列的同时匹配所有子序列;
注意到,遍历原序列,一个位置上只有一个值(当然啦);
所以考虑这一个值能否推进子序列的匹配,就需要知道每个子序列下一步需要的值是多少;
再换个角度,在每个值上挂一个 vector,存需要这个值的子序列有哪些;
然后遍历到这个位置,就把它的值上挂的所有子序列的匹配都推进1步,匹配完就是可行的;
思路很好的一道题!
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define pb push_back
using namespace std;
int const xn=1e6+;
int m,n,a[xn],l[xn];
bool ok[xn];
struct N{int x,y;};
vector<int>b[xn];
vector<N>v[xn],sta;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
int main()
{
m=rd();
for(int i=;i<=m;i++)a[i]=rd();
n=rd();
for(int i=;i<=n;i++)
{
l[i]=rd();
for(int j=,x;j<=l[i];j++)x=rd(),b[i].pb(x);
int y=b[i][]; v[y].pb((N){i,});
}
for(int i=;i<=m;i++)
{
int y=a[i]; sta.clear();
for(int j=;j<v[y].size();j++)
{
N t=v[y][j];
if(t.y==l[t.x])ok[t.x]=;
else sta.pb((N){t.x,t.y+});
}
v[y].clear();
for(int j=;j<sta.size();j++)
{
N t=sta[j];
v[b[t.x][t.y-]].pb(t);//b:0~l-1
}
}
for(int i=;i<=n;i++)
{
if(ok[i])puts("TAK");
else puts("NIE");
}
return ;
}
bzoj 2083 Intelligence test —— 思路+vector的更多相关文章
- bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 给每个值开一个vector.每个询问挂在其第一个值上:然后枚举给定序列,遇到一个值就访 ...
- BZOJ 2083 Intelligence test
用vector,二分. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- BZOJ 2083: [Poi2010]Intelligence test [vector+二分]
2083: [Poi2010]Intelligence test Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 469 Solved: 227[Su ...
- BZOJ 2083 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——vecto+二分
Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...
- [BZOJ 2083] [POI 2010] Intelligence test
Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...
- BZOJ 3252: 攻略(思路题)
传送门 解题思路 比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次..其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的 ...
- BZOJ.1071.[SCOI2007]组队(思路)
题目链接 三个限制: \(Ah-AminH+Bv-BminV\leq C\ \to\ Ah+Bv\leq C+AminH+BminV\) \(v\geq minV\) \(h\geq minH\) 记 ...
随机推荐
- 2017-10-29-morning-清北模拟赛
T1 遭遇 #include <algorithm> #include <cstdio> #include <cmath> inline void read(int ...
- influxDB的安装和简单使用
单机的influxdb免费,集群的是收费的 1.安装,参考官方文档 https://portal.influxdata.com/downloads RedHat & CentOS: wget ...
- Tips/Tricks in Deep Neural Networks
转自: http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html
- BUPT 2012复试机考 3T
97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...
- BeagleBone Black Industrial 杂谈
前言 原创文章,转载引用务必注明链接.水平有限一己拙见,欢迎指正. 本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文: 初版BeagleBone Black(Rev A4) ...
- 使用虚拟机VM运行Linux版OpenERP
Table of Contents 下载.安装vmware player --免费 从百度云下载 镜像文件 建立vm 运行vm 访问openerp 更新代码至最新 下载.安装vmwar ...
- [Other]来做一个微信打印机吧 -- 微信打印的设计思路參考
项目源代码地址:https://github.com/callmewhy/why-wechat-printer 近期微信打印机小火了一把.比方印美团.747微信打印机,都是利用微信公共平台实现照片的打 ...
- Java中常见的注解
Java中常见的注解 1.JDK自带的注解@Override @Deprecated @Suppvisewarnings 常见第三方注解 Spring:@Autowired @Service ...
- LeetCode(26)题解:Remove Duplicates from Sorted Array
https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the ...
- Android cookies正确的更新方式
之前的更新方式 一搜cookies的使用,非常easy搜到非常多文章.主要的几步大致同样.例如以下图: 基本上都要求大家先调用cookieManager.removeAllCookie()或者调用 c ...