Uva1608
如果一个序列的所有子序列中均存在至少一个元素,这个元素在该子序列中只出现一次,则这个序列non-boring。
当一个序列[x,y]中没有元素只出现一次,那么该序列不符合要求,如果有的话,设为第i个元素,则 只要[x,i-1]和 [i+1,n] 符合要求,则该序列符合要求。
在O(N)的时间内预处理一个元素左右离它最近的相同元素的位置,即可在O(1)时间内查询是否这个元素在给定序列中只出现一次。
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = ;
int t;
int a[maxn+];
int lef[maxn+];
int rgt[maxn+];
map<int, int> ml, mr;
bool judge(int i, int x, int y){
if(lef[i] < x && rgt[i] > y){
//printf("%d %d %d\n",i,lef[i],rgt[i]);
return ;
} else {
return ;
}
}
bool dfs(int x, int y){
if(x >= y){
return ;
}
if(x + == y){
return a[x] != a[y];
}
int res = ;
for(int i = x, j = y; i <= j ; ++i, --j){
if(judge(i, x, y)){
// printf("dsadsa:%d %d %d\n",i,x,y);
res = dfs(x, i-) && dfs(i+, y);
} else if(judge(j, x, y)){
// printf("AAAAAA:%d %d %d\n",j,x,y);
res = dfs(x,j-) && dfs(j+, y);
}
if(res == ){
return ;
}
}
return ;
}
void init(){
ml.clear();
mr.clear();
}
int main(){
scanf("%d",&t);
while(t--){
init();
int n;
scanf("%d",&n);
for(int i = ; i <= n; ++i){
scanf("%d",&a[i]);
lef[i] = ;
rgt[i] = inf;
}
for(int i = , j = n; i <= n && j >= ; ++i,--j){
int tmp = ml[a[i]];
int tmp1 = mr[a[j]];
if(tmp){
lef[i] = tmp;
}
ml[a[i]] = i;
if(tmp1){
rgt[j] = tmp1;
}
mr[a[j]] = j;
}
int ans = dfs(,n);
if(ans == ){
printf("boring\n");
} else {
printf("non-boring\n");
}
}
}
Uva1608的更多相关文章
- UVa1608 UVaLive6258 Non-boring sequences
填坑系列(p.248) 比较神 从两端枚举 最坏复杂度就成O(nlogn)了 #include<cstdio> #include<cstdlib> #include<al ...
- 8-16 不无聊序列 non-boring sequences uva1608
题意: 如果一个序列的任意连续子序列中至少有一个只出现一次的元素 则称这个序列是 不无聊序列 输入一个n个元素的序列a 判断是不是不无聊序列 一开始想当然 以为只要 2位的子序列都满足即可 ...
- uva1608 Non-boring sequences
某个序列找到唯一元素后,判断被分成的两边的序列即可问题在于找到唯一元素连续序列,重复元素的问题:感觉很有一般性 查找相同元素用map,last,next存上一个相同元素的位置复杂度计算有点思考:记录l ...
- UVA-1608
We were afraid of making this problem statement too boring, so we decided to keep it short. A sequen ...
- 题解 UVA1608 【不无聊的序列 Non-boring sequences】
思路: 算法很显然: 一.在区间\([l,r]\)找到一个只出现一次的元素P(如果不存在,那么序列\(boring\)) 二.递归处理区间\([l,p-1]\)和区间\([p+1,r]\). 其关键在 ...
- ●UVA 1608 Non-boring sequences
题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...
随机推荐
- gulp之压缩图片
//先全局安装gulp:npm install -g gulp //然后在项目根目录中安装gulp依赖:npm install --save-dev gulp //http://www.gulpjs. ...
- python中http请求中添加cookie支持
python3中构造http的Request需要用到urllib.request. 有时会用到cookie. 比如在访问网站首页得到cookie,通过下面代码添加cookie: #insta ...
- vs2015解决fopen、fscanf 要求替换为fopen_s、fscanf_s的办法
在工程项目设置一下就行:项目属性 -- C/C++-- 预处理器 -- 预处理器定义,添加:_CRT_SECURE_NO_WARNINGS
- java core
1: Java7 以后的 NIO. 2: 泛型要掌握,这里重点强调一点,泛型类之间不存在继承关系,所有的泛型对象在编译后都会去泛型化,都是同一个 class 对象,例如 ArrayList< ...
- HTML DOM setTimeout() 方法
转自:http://www.w3school.com.cn/jsref/met_win_settimeout.asp 1.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. &l ...
- 各种浏览器下的user-agent
ie11Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko safariMozilla/5.0 (Macintos ...
- ReflectionToStringBuilder.totring()
maven引用 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commo ...
- JDBC编程之程序优化
-----------------siwuxie095 首先下载 MySQL 的 JDBC 驱动,下载链接: https://dev.mysql.com/downloads/connector/j/ ...
- javascript的DI
学习AngularJS的原因之一就是觉得他的DI很牛叉,为了更好的学习,在研究源码之前,想自己按照自己的思路先实现个DI,希望这个思路能够对学习源码有帮助. (function(){ var conf ...
- linux date用法
读者可以设定特定的格式,格式设定规则:一个加号后接数个标记,每个标记中都有%,其中可用的标记列表和说明如下: %n : 下一行 %t : 跳格 %H : 小时(00..23) %I : 小时(01. ...