一、题目 二、解题思路 题目看起来比较复杂,但提取关键字以后就会发现问题其实挺简单。 关键字:连续、男女人数相等、0女生、1男生。 分析题目可以发现,我们的问题实际上为找到和为长度一半的连续子序列,考虑到数据的规模比较小,我们可以直接采用暴力搜索:对于每个同学,查找包含他的所有连续子序列(长度需要为偶数,因为奇数必然不可能男女人数相等),并检查这些连续子序列是否满足要求。 对于数列[ai, aj]的和,我们可以采用简便的计算方式。首先计算整个数列的前n项和,记sum[n]为前n项和,那么[ai, aj]等于sum[j]-sum[i-1]。 三、代码 #include<iostream> #include<string> #include<vector> #include<map> #include<algorithm> #include<cmath> #include<queue> using namespace std; int main(){ int n; cin>>n; int sum[100001]={0}; int ret=0; int now=0; for(int i=0;i<n;i++){ int temp; cin&g