分治法,中途相遇法(Non-boring sequences,uva 1608)
来源:互联网 发布:php 读取文件夹 图片 编辑:程序博客网 时间:2024/05/17 06:51
分治法很容易想到。
中途相遇法真是个神奇的东西。
意思大概就是,你可以从两边出发去寻找答案,然而无论你从那一边出发,随着寻找的次数逐渐增多,枚举量飞速增长,因此你不如从两边一起找,这样两边的枚举量都能显著控制在较低水平,从而提高程序效率。
感觉在uva超时了就很有可能是数组越界了。。。
代码
#include<bits/stdc++.h>#define maxn 200010#define INF 0X3F3F3F3Fusing namespace std;int n;int a[maxn];int l[maxn];int r[maxn];map<int,int>lastl;map<int,int>lastr;bool br(int L,int R){ if(L>=R) return true; int i=L; int j=R; while(i<=j) { if(l[i]<L&&r[i]>R) return br(L,i-1)&&br(i+1,R); if(l[j]<L&&r[j]>R) return br(L,j-1)&&br(j+1,R); i++; j--; } return false;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); lastl.clear(); lastr.clear(); for(int i=1,j=n;i<=n;i++,j--) { if(lastl[a[i]]==0) l[i]=-1; else l[i]=lastl[a[i]]; lastl[a[i]]=i; if(lastr[a[j]]==0) r[j]=INF; else r[j]=lastr[a[j]]; lastr[a[j]]=j; } if(br(1,n)) puts("non-boring"); else puts("boring"); } return 0;}
0 0
- 分治法,中途相遇法(Non-boring sequences,uva 1608)
- UVA - 1608 Non-boring sequences 分治"中途相遇"
- Uva1608 Non-boring sequences 【分治+中途相遇】【例题8-16】
- Uva 1608 Non-boring sequences(分治)
- uva 1608(分治 + 中途相遇法)
- UVA 1608 Non-boring sequences 递归分治
- UVA 1608 Non-boring sequences (递归分治)
- UVA 1608:Non-boring sequences(递归+分治思想)
- UVa 1608 Non-boring sequences
- uva 1608 - Non-boring sequences
- UVA 1608 Non-boring sequences
- uva 1608 Non-boring sequences
- uva 1608 Non-boring sequences
- UVA 1608 Non-boring sequences
- UVA-1608 Non-boring sequences
- Uva 1608 Non-boring sequences
- UVa 1608:Non-boring swquences(分治)
- Non-boring sequences UVA
- 特征值与特征向量的几何意义
- 01 戴尔混合云DHCS今生与前世
- HDU3746-Cyclic Nacklace
- HDU 4417 Super Mario(离线线段树)
- 自定义控件day02笔记
- 分治法,中途相遇法(Non-boring sequences,uva 1608)
- 顺序表应用6:有序顺序表查询
- Spark——SparkContext简单分析
- Oracle函数,按分隔符截取字符串
- httpurlconnection发送文件到服务端并接收
- light oj 1211 - Intersection of Cubes (计算几何)
- 【转】intellij IDEA里各图标对应的文件类型
- RCU机制详解
- 编程珠玑:第三章 数据决定程序结构 习题解答