1 1 1 5 3 4 5 3 2 1
1 3HintFor the second case, {3},{5,3,2},{4,5,3,2,1} are Bestcoder Sequence.
题意为 给定一个1 -N的排列,再给定一个数M(1<=M<=N),问有多少连续的长度为奇数子序列,使得M在其中为中位数(M在子序列中)。
比如样例
5 3
4 5 3 2 1 N=5, M=3
{3},{5,3,2},{4,5,3,2,1} 为符合题意的连续子序列....
当时做的时候把包含M的所有长度为0,1,2.......的连续子序列都枚举了出来,然后判断判断M是否是中位数,结果 果断超时.......
贴一下题解思路:
写了一堆字,CSDN的排版太....了,贴图片把.
代码:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int maxn=40010; int sum[maxn]; int cnt[maxn*2]; int n,m; int val,p; int main() { while(scanf("%d%d",&n,&m)==2) { sum[0]=0; for(int i=1;i<=n;i++) { sum[i]=sum[i-1]; scanf("%d",&val); if(val<m) sum[i]--; else if(val>m) sum[i]++; else p=i; } memset(cnt,0,sizeof(cnt)); for(int i=0;i<p;i++) cnt[sum[i]+maxn]++; int ans=0; for(int i=p;i<=n;i++) ans+=cnt[sum[i]+maxn]; printf("%d\n",ans); } return 0; }
[BestCoder Round #3] hdu 4908 BestCoder Sequence (计数),布布扣,bubuko.com
[BestCoder Round #3] hdu 4908 BestCoder Sequence (计数)
原文:http://blog.csdn.net/sr_19930829/article/details/38371239