[POI2014]Criminals
题目大意:
给你一个长度为$n(n\le10^6)$的颜色序列,其中每个颜色互不相同。两个人$A$和$B$分别从某个点出发从左往右、从右往左任意地选择颜色,然后在中间的某一点相遇。分别给出两人所选择的颜色序列,求有哪些点可能是相遇点。
思路:
$O(n)$线性扫出对于每个点$i$,颜色序列$A$在$i$及$i$前结束时,$A$左端点最右的位置$l_i$,颜色序列$B$在$i$及$i$后结束时,$B$右端点最右的位置$r_i$。
枚举每个点作为相遇点,判断区间$[1,l_i)$和$(r_i,n]$有没有相同颜色即可。因为$l_i$和$r_i$都是单调不降,因此复杂度还是$O(n)$的。
#include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=1e6+;
int c[N],s1[N],s2[N],pos1[N],pos2[N],f[N],l[N],r[N],ans[N];
int main() {
const int n=getint(),m=getint();
for(register int i=;i<=n;i++) c[i]=getint();
s1[]=getint(),s2[]=getint();
for(register int i=;i<=s1[];i++) f[pos1[s1[i]=getint()]=i]=;
for(register int i=;i<=n;i++) {
if(pos1[c[i]]) f[pos1[c[i]]]=pos1[c[i]]==?i:f[pos1[c[i]]-];
l[i]=f[s1[]];
}
for(register int i=;i<=s2[];i++) f[pos2[s2[i]=getint()]=i]=n+;
for(register int i=n;i>=;i--) {
if(pos2[c[i]]) f[pos2[c[i]]]=pos2[c[i]]==?i:f[pos2[c[i]]-];
r[i]=f[s2[]];
}
for(register int i=;i<=m;i++) pos1[i]=pos2[i]=;
for(register int i=;i<=n;i++) pos2[c[i]]++;
for(register int i=,tmp=;i<=n;i++) {
for(register int j=l[i-];j<l[i];j++) {
if(!pos1[c[j]]++&&pos2[c[j]]) tmp++;
}
for(register int j=r[i];j>r[i-];j--) {
if(!--pos2[c[j]]&&pos1[c[j]]) tmp--;
}
if(c[i]==s1[s1[]]&&tmp) ans[++ans[]]=i;
}
printf("%d\n",ans[]);
for(register int i=;i<=ans[];i++) {
printf("%d%c",ans[i]," \n"[i==ans[]]);
}
return ;
}
[POI2014]Criminals的更多相关文章
- BZOJ3828 : [Poi2014]Criminals
对于每个位置求出L[i]表示左边最大的j,满足从j开始到i-1中存在第一个子序列 R[i]表示右边最小的j,满足从j开始到i-1中存在第二个子序列 然后枚举颜色是相遇点的位置,如果L[i]左边.R[i ...
- POI2014题解
POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][St ...
- BZOJ 3524: [Poi2014]Couriers
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1905 Solved: 691[Submit][St ...
- [BZOJ3872][Poi2014]Ant colony
[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...
- Codeforces Round #356 (Div. 2)B. Bear and Finding Criminals(水题)
B. Bear and Finding Criminals time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- 【BZOJ】【3522】【POI2014】Hotel
暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...
- 【BZOJ】【3831】【POI2014】Little Bird
DP/单调队列优化 水题水题水题水题 单调队列优化的线性dp…… WA了8次QAQ,就因为我写队列是[l,r),但是实际操作取队尾元素的时候忘记了……不怎么从队尾取元素嘛……平时都是直接往进放的……还 ...
随机推荐
- Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 今天接着昨天的说 索引有4种: 普通 索引 :ind ...
- PAT——甲级1046S:shortest Distance
这道题,折磨了我一个多小时,前前后后写了三个算法. 1046 Shortest Distance (20 point(s)) The task is really simple: given N ex ...
- [hdu6434]Problem I. Count
题目大意:$T(T\leqslant 10^5)$组数据,每组数据给你$n(n\leqslant 2\times 10^7)$,求$\sum\limits_{i=1}^n\sum\limits_{j= ...
- 【BZOJ 4151 The Cave】
Time Limit: 5 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 293 Solved: 144[Submit][Status][Di ...
- mysql外网链接
1:设置mysql的配置文件 /etc/mysql/my.cnf 找到 bind-address =127.0.0.1 将其注释掉://作用是使得不再只允许本地访问: 重启mys ...
- Android 自定义动画 Loading
转自:http://my.oschina.net/janson2013/blog/118558 1.定义一个ImageView 定义一个ImageView是为了装载图片,其中的图片将被rotate用来 ...
- Linux Ubuntu mysql 乱码
进入mysql后,敲入命令status,就可以看到mysql的字符编码问题. 默认如下: Server characterset: latin1 Db characterset: lat ...
- readbook:自己设计mvc框架,java类似struts2的实现
如果你不能简单说清楚,就是你还没有完全明白.——爱因斯坦 need things: 1.操作xml文档 dom4j 等开源类库 2. dtd的验证 等知识储备 * n到n次 ? 0到1次 ...
- hdu 6114 百度之星复赛B T1
Chess Problem Description 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子. 一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中 ...
- 百度之星初赛(A)——T6
度度熊的01世界 Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者 ...