poj 3415 , poj 3581,BZOJ 3538
来源:互联网 发布:mac os 11 yosemite 编辑:程序博客网 时间:2024/06/07 05:13
后缀数组总结:http://blog.csdn.net/crazy_ac/article/details/9666833
poj 3415char s1[N],s2[N]; int val[N],num[N]; __int64 solve(int n,int len,int k,int flag) { int tot , top = 0; __int64 ans = 0 ,sum; for(int i=1;i<=n;i++) { if(h[i]<k) sum = tot = top = 0; else { tot = 0; if((sa[i-1]>len)^flag) tot=1,sum+=h[i]-k+1; while(top>0 && val[top] >= h[i]) { sum -= (__int64) (val[top] - h[i]) * num[top]; tot += num[top]; top --; } num[++top] = tot; val[top] = h[i]; if((sa[i] < len)^flag) ans += sum; } } return ans; } int main() { int k; scanf("%d",&k); while(scanf("%d",&k),k) { scanf("%s%s",s1,s2); int len1 = strlen(s1); int len2 = strlen(s2); for(int i=0;i<len1;i++) a[i]=s1[i]; a[len1] = '$'; for(int i=0;i<len2;i++) a[i+len1+1]=s2[i]; int n = len1 + len2 + 1; a[n] = 0; suffix(n+1); printf("%I64d\n",solve(n,len1,k,0) + solve(n,len1,k,1)); } return 0; }
poj 3581#include <cstdio> #include <cstring> #include <algorithm> const int N = 444444; using std::reverse_copy; int a[N] , b[N]; int min_p(int *s,int n,int p) { int i = p, j = p+1; while(true) { if(i >= n || j >= n) break; int k = 0; for(;k<n&&i<n&&j<n&&s[i+k]==s[j+k];k++); if(k >= n) break; if(s[i+k] > s[j+k]) { i += k + 1; } else { j += k + 1; } if(i == j) j++; } return std::min(i,j); } int main() { int n; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&a[i]); reverse_copy(a,a+n,b); reverse_copy(a,a+n,b+n); int p1 = n - 1 - min_p(b,n,2); reverse_copy(a+p1+1,a+n,b); reverse_copy(a+p1+1,a+n,b+n-p1-1); int p2 = n-p1-1 - min_p(b,n-p1-1,1); p2 = p1 + p2; for(int i = p1; i >= 0; i--) printf("%d\n",a[i]); for(int i = p2; i > p1; i--) printf("%d\n",a[i]); for(int i = n-1;i > p2; i--) printf("%d\n",a[i]); puts(""); return 0; }
BZOJ 3538
struct node { int l,r,vi; node () {} node(int _l,int _r,int _vi):l(_l),r(_r),vi(_vi) {}};node st[N];int top ;long long sum[N];long long ans;void dfs(int l,int r){ top = 0; st[++top] = node(l,r,0); while(top > 0) { node tmp = st[top]; if(tmp.l == tmp.r || tmp.vi == 2) { top--; continue; } if(tmp.vi == 0) { int l = tmp.l, r = tmp.r; st[top].vi++; int m = rmq(l+1,r,h); ans += (long long) (m-l)*(sum[r]-sum[m-1]) + (long long)(r-m+1)*(sum[m-1]-sum[l-1]) ; ans -= 2LL * h[m] * (r-m+1) * (m - l); if(l!=m-1)st[++top] = node(l,m-1,0); } else { st[top].vi++; int m = rmq(tmp.l+1,tmp.r,h); st[++top] = node(m,tmp.r,0); } }}char s[N];int main(){ ans = 0; LOG[0] = -1; for(int i = 1; i < N; i++) LOG[i] = LOG[i>>1] + 1; scanf("%s",s); int n = strlen(s); for(int i = 0; i < n; i++) a[i] = s[i]; a[n] = 0; suffix(n+1,128); sum[0] = 0; for(int i = 1; i <= n; i++)sum[i] = sum[i-1] + n - sa[i]; rmq_init(h,n); dfs(1,n); printf("%lld\n",ans); return 0;}
- poj 3415 , poj 3581,BZOJ 3538
- 【bzoj 2288】【POJ Challenge】生日礼物
- bzoj 3239 poj 2417 BSGS
- poj 2976 && poj 2728 && poj3621 && bzoj 1486 01分数规划
- POJ 青蛙的约会(BZOJ 1477)
- bzoj 2419 & poj 3532 电阻 题解
- BZOJ 2287: 【POJ Challenge】消失之物
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
- [BZOJ 2287][POJ Challenge]消失之物
- POJ 1741|BZOJ 1468|Tree|树分治
- [乱搞] BZOJ 2296 [POJ Challenge] 随机种子
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
- BZOJ 2296 【POJ Challenge】随机种子 构造
- POJ 2480 BZOJ 2705 Longge的问题
- |题目分类|BZOJ、Poj、Hdu题目分类
- BZOJ 1895 & POJ 3580 supermemo[SPLAY]【数据结构】
- BZOJ 2287 【POJ Challenge】消失之物
- js中window.onload与jquery中$(document.ready())的区别
- HDU--1010 -- Tempter of the Bone [DFS+经典奇偶剪枝]
- winform实现把外部文件拖入PictureBox的代码示例
- live555 linux 编译
- eclipse 启动Tomcat超时错误
- poj 3415 , poj 3581,BZOJ 3538
- Gallery is deprecated:Gallery 过期了怎么办?(一)
- struts 学习方略
- Windows下的ffmpeg编译
- 在源eclipse上,以安装插件方式,安装myeclipse
- 监视RMAN通道例子
- linux 内存释放调试经验积累
- MFC自定义消息
- Android编程实现文本文件下载