UVa 1608 - Non-boring sequences
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4483
题意:
如果一个序列的任意连续子序列中至少有一个只出现一次的元素,则称这个序列是不无聊(non-boring)的。
输入一个n(n≤200000)个元素的序列A(各个元素均为1e9以内的非负整数),判断它是不是不无聊的。
分析:
在整个序列中找一个只出现一次的元素,如果不存在,则这个序列不是不无聊的;
如果找到一个只出现一次的元素A[k],则只需检查A[1…k-1]和A[k+1…n]是否满足条件(分治)。
设长度为n的序列需要T(n)时间,则有T(n) = max{T(k-1) + T(n-k) + 找到唯一元素k的时间}。
如何找唯一元素?如果事先算出每个元素左边和右边最近的相同元素,
则可以在O(1)时间内判断在任意一个连续子序列中,某个元素是否唯一。
如果从左边找,最坏情况下唯一元素是最后一个元素,因此
T(n) = T(n-1) + O(n)≥T(n) = O(n*n)
从右往左找也一样,只不过最坏情况变成了“唯一元素是第一个元素”,但时间复杂度不变。
那么,从两边往中间找会怎样?此时T(n) = max{T(k) + T(n-k) + min(k,n-k)},
而此时的最坏情况是唯一元素在中间的情况,它满足经典递推式T(n) = 2T(n/2) + O(n),即T(n)=O(nlogn)。
代码:
#include <cstdio>
#include <map>
using namespace std; const int UP = + ;
int a[UP], prior[UP], after[UP]; inline bool check(int p, int L, int R){
return prior[p] < L && after[p] > R;
} bool judge(int L, int R){
if(L >= R) return true;
for(int d = ; L + d <= R - d; d++){
if(check(L+d, L, R)) return judge(L, L+d-) && judge(L+d+, R);
if(L + d == R - d) break;
if(check(R-d, L, R)) return judge(R-d+, R) && judge(L, R-d-);
}
return false;
} int main(){
int T, n;
scanf("%d", &T);
while(T--){
map<int,int> M;
scanf("%d", &n);
for(int i = ; i < n; i++){
scanf("%d", &a[i]);
prior[i] = M.count(a[i]) ? M[a[i]] : -;
M[a[i]] = i;
}
M.clear();
for(int i = n - ; i >= ; i--){
after[i] = M.count(a[i]) ? M[a[i]] : n;
M[a[i]] = i;
} if(judge(, n-)) printf("non-boring\n");
else printf("boring\n");
}
return ;
}
UVa 1608 - Non-boring sequences的更多相关文章
- UVa 1608,Non-boring sequences
好诡异的一个题啊 紫书上关于从左边找还是从两边往中间找的讨论没有看懂,怎么一下就找到唯一的元素了(⊙_⊙?) 方法就是用的书上讲的方法,类似于uva 11572,不过这个题需要预处理存下两边的最近的相 ...
- uva 1608 不无聊的序列
uva 1608 不无聊的序列 紫书上有这样一道题: 如果一个序列的任意连续子序列中都至少有一个只出现一次的元素,则称这个序列时不无聊的.输入一个n个元素的序列,判断它是不是无聊的序列.n<=2 ...
- UVa 1608 (分治 中途相遇) Non-boring sequences
预处理一下每个元素左边和右边最近的相邻元素. 对于一个区间[l, r]和区间内某一个元素,这个元素在这个区间唯一当且仅当左右两边最近的相邻元素不在这个区间内.这样就可以O(1)完成查询. 首先查找整个 ...
- ●UVA 1608 Non-boring sequences
题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...
- UVa 1608 Non-boring sequences (分治)
题意:给你一个长度为n序列,如果这个任意连续子序列的中都有至少出现一次的元素,那么就称这个序列是不无聊的,判断这个序列是不是无聊的. 析:首先如果整个序列中有一个只出过一次的元素,假设是第 p 个,那 ...
- UVA - 1608 Non-boring sequences (分治,中途相遇法)
如果一个序列中是否存在一段连续子序列中的每个元素在该子序列中都出现了至少两次,那么这个序列是无聊的,反正则不无聊.给你一个长度为n(n<=200000)的序列,判断这个序列是否无聊. 稀里糊涂A ...
- UVA - 1608 Non-boring sequences(分治法)
题目: 如果一个序列的任意连续的子序列中至少有一个只出现一次的元素,则称这个序列是不无聊的.输入一个n(n≤200000)个元素的序列A(各个元素均为109以内的非负整数),判断它是不是不无聊的. 思 ...
- UVA - 1608 Non-boring sequences (分治)
题意:如果一个序列的任意连续子序列中至少有一个只出现一次的元素,则称这个序列式为non-boring.输入一个n(n≤200000)个元素的序列A(各个元素均为109以内的非负整数),判断它是否无聊. ...
- UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
题意:给你一个长度为n序列,如果这个任意连续子序列的中都有至少出现一次的元素,那么就称这个序列是不无聊的,判断这个序列是不是无聊的. 先预处理出每个元素之前和之后相同元素出现的位置,就可以在O(1)的 ...
随机推荐
- bzoj 3512: DZY Loves Math IV
Description 给定n,m,求 模10^9+7的值. Solution 设 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\) \(Ans=\sum_{i=1} ...
- jQuery 整体架构
不同于 jQuery 代码各个模块细节实现的晦涩难懂,jQuery 整体框架的结构十分清晰,按代码行文大致分为如上图所示的模块. 初看 jQuery 源码可能很容易一头雾水,因为 9000 行的代码感 ...
- thinkjs crud练习
今天看了下thinkjs(v2.1.7),做了一个简单的入门demo,基于mysql数据库增删改查,详细源码如下: 页面整体展示: 会员新增: 删除: 查询: 主页面: <!DOCTYPE ht ...
- 13. Roman to Integer 罗马数字转化为阿拉伯数字(indexOf ()和 toCharArray())easy
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...
- servlet开发(二)之servlet的线程安全问题
之所以考虑线程安全问题,是因为引入了多线程.多线程指的是这个程序(一个进程)运行时产生了不止一个线程.如果不考虑多线程的话,程序执行只有一条路径,就像人在敲代码的时候只能敲代码,不能戴上耳机听歌.引入 ...
- 第2章、数据与简单计算程序(c语言入门)
一.写程序描述数据的处理 ①描述数据 ②描述过程 ps:和做鸡蛋饼差不多:数据是材料,作法是过程. 空白符的作用是使用程序更容易了解. 二.标识符 1.基本要求: ①由字母,数字,下划线组成. ②数字 ...
- 洛谷P2831 愤怒的小鸟(状压dp)
题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...
- 软件项目技术点(1)——Tween算法及缓动效果
AxeSlide软件项目梳理 canvas绘图系列知识点整理 Tween算法及缓动效果 软件里在切换步序时需要有过渡动画效果,从当前位置的画面缓动到目标位置的画面.动画效果可重新查看文章系列第一篇 ...
- MySQL数据库(3)----设置和使用自定义变量
MySQL支持定义自己的变量.这些变量可以被设置为查询结果,这使我们可以方便地把一些值存储起来供今后查询使用. ; +-----------------+ | @HisName:= name | +- ...
- Python爬虫教程-15-读取cookie(人人网)和SSL(12306官网)
Python爬虫教程-15-爬虫读取cookie(人人网)和SSL(12306官网) 上一篇写道关于存储cookie文件,本篇介绍怎样读取cookie文件 cookie的读取 案例v16ssl文件:h ...