早起一AC,整天萌萌哒。
Problem: 1303 User: forgot93 Language: C++ Result: Accepted Time:56 ms Memory:2108 kb ****************************************************************/ #include <cstdio> const int MAXN = 111111; int a[MAXN], h[MAXN << 1]; int main() { int n, b; scanf("%d%d", &n, &b); int k; for (int i = 1;i <= n; ++i) { scanf("%d", &a[i]); if (a[i]==b) k=i; } for (int i=k,t=0;i<=n;i++){ if (a[i]>b) t++; else if (a[i]<b) t--; h[t+MAXN]++; } int ans=h[MAXN]; for (int i=k-1,t=0;i>=1;i--) { if (a[i]>b) t++; else t--; ans+=h[MAXN-t]; } printf("%d ",ans); return 0; }
分析:1:先确定B的位置k,
2:统计k-n中大于B的数,小于B的数,
3:从K-1到1枚举,大于B,t++,小于B,t--;当K前面的T与K后面的T相等是就是一个结果。
输出