-
Mr. Panda and Strips
- Gym - 101194C
- 题意:现在要找到数列中连续两个子序列(没有公共部分)。要求这两个子序列本身内部没有重复出现的数。
- 求这两个子序列的长度的和的最大值。
- 思路:首先对于尺取的L与R,再次尺取0到L与R到N,从中选择一段最长的连续序列,每次更新即可
-
#include<bits/stdc++.h> using namespace std; #define maxn 1234 int n,t,a[maxn],l,r,ans; bool vis[maxn]; int ok(int L,int R) { if(L>=R)return 0; int l=L,r=L,sum=0; while("LHK is b a o b a o") { while(r<R&&!vis[a[r]]) { vis[a[r]]++; r++; sum=max(sum,r-l); } if(l==R&&r==R)break; vis[a[l]]=0; l++; if(l==R&&r==R)break; } return sum; } int main() { scanf("%d",&t); for(int q=1; q<=t; q++) { memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=0; i<n; i++) scanf("%d",&a[i]); ans=l=r=0; while("she is L H K ") { while(r<n&&!vis[a[r]]) { vis[a[r]]++; r++; ans=max(ans,r-l+max(ok(0,l),ok(r,n))); } vis[a[l]]=0; l++; ans=max(ans,r-l+max(ok(0,l),ok(r,n))); if(l==n&&r==n)break; } printf("Case #%d: %d\n",q,ans); } return 0; }
Mr. Panda and Strips Gym - 101194C -尺取
最新推荐文章于 2021-04-22 16:52:42 发布