UVALive
来源:互联网 发布:湖南网络工程学院宿舍 编辑:程序博客网 时间:2024/06/03 23:48
/************************************************************************* > Author: MentalOmega > Mail: 965194745@qq.com > Created Time: 2017年10月14日 > function:题目意思是给你一串字符串,如果这个字符串的任意连续字串中都存在一个数是独一无二的就输出不无聊 由于是要要求是任意连续字串。先考虑最长的那个字串,先找到一个能够满足他的。 比如字串12321,3能照顾到整个字串,那么只要包含3的字串都是合法的,不包含3的就是剩下12和21,相当于被3劈成两半 这两半就是一个子问题了 ************************************************************************/#include<bits/stdc++.h>using namespace std;const int MAXN = 2e6+10;int n;struct Node{ int v; int prev,nextv;//离他最近值相同的坐标}node[MAXN];bool dfs(int left,int right){ for(int l=left,r=right;r>=l;l++,r--)//左右同时找,防止独一无二的数聚集在一侧那么会退化成n方 { if(node[l].prev<left&&node[l].nextv>right) return dfs(left,l-1)&&dfs(l+1,right); if(node[r].prev<left&&node[r].nextv>right) return dfs(left,r-1)&&dfs(r+1,right); } return left>=right;}int main(){ if (fopen("in.txt", "r") != NULL) { freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); } int t; cin>>t; while(t--) { map<int,int> mp; cin>>n; int cnt=0; for(int i=1;i<=n;i++) { int v; cin>>v; if(mp.count(v)==0) mp[v]=cnt++; v=mp[v]; node[i]={v,0,n+1}; } int vis[cnt]={0}; for(int i=1;i<=n;i++) { node[i].prev=vis[node[i].v]; vis[node[i].v]=i; } fill(vis,vis+cnt,n+1); for(int i=n;i>=1;i--) { node[i].nextv=vis[node[i].v]; vis[node[i].v]=i; } cout<<(dfs(1,n)?"non-boring":"boring")<<'\n'; } return 0;}
阅读全文
0 0
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- 机器学习资源整理(视频、书籍、链接)
- 步伐多慢无关紧要,只要你坚持不懈
- Concurrent.util 常用类的介绍和使用
- java工程师面试题_2年经验
- 对象池实操(一)_发射子弹简单演示
- UVALive
- 吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
- 新人练习之只使用String.length和String.CharAt();来完成常用StringAPI的编写
- NOWCODER Treepath (树dp水题)
- H5的新特性
- Sublime Text3 3143 注册码,亲测可用!
- NYOJ的矩形嵌套问题
- Django框架下使用ajax模拟用户登录验证
- 2017.10.14