分治法,中途相遇法(Non-boring sequences,uva 1608)
2016-09-13 21:43
447 查看
分治法很容易想到。
中途相遇法真是个神奇的东西。
意思大概就是,你可以从两边出发去寻找答案,然而无论你从那一边出发,随着寻找的次数逐渐增多,枚举量飞速增长,因此你不如从两边一起找,这样两边的枚举量都能显著控制在较低水平,从而提高程序效率。
感觉在uva超时了就很有可能是数组越界了。。。
代码
#include<bits/stdc++.h>
#define maxn 200010
#define INF 0X3F3F3F3F
using 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;
}
中途相遇法真是个神奇的东西。
意思大概就是,你可以从两边出发去寻找答案,然而无论你从那一边出发,随着寻找的次数逐渐增多,枚举量飞速增长,因此你不如从两边一起找,这样两边的枚举量都能显著控制在较低水平,从而提高程序效率。
感觉在uva超时了就很有可能是数组越界了。。。
代码
#include<bits/stdc++.h>
#define maxn 200010
#define INF 0X3F3F3F3F
using 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;
}
相关文章推荐
- 关于一些UI的实现
- 百度地图API(二)
- stringbuilder
- Bluemix平台打造DC/OS云计算平台(一)
- esayUI实践的一些体会
- EasyUI——常见用法总结
- LeetCode 387:First Unique Character in a String
- HDU1711-Number Sequence
- C# GUID转换成16位字符串或19位数字并确保唯一
- POJ2524:Ubiquitous Religions
- GUI Swing 组件常用方法
- string和stringBuilder的区别
- 2015 Multi-University Training Contest 1 OO’s Sequence
- Android 更新UI 只能在主线程?
- PowerBuilder配置SqlServer2008R2数据库连接
- Leetcode 51 N-Queens
- UIdatePicker中修改文字颜色
- 登录报错:A granted authority textual representation is required
- 2016 ACM/ICPC Dalian Online-1002 Different GCD Subarray Query
- JFinalUIB V3发布,书籍随后更新