代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],boy,girl,sum;
int b[1000001],g[1000001];
inline int read(){
register int x = 0, t = 1;
register char ch=getchar(); // 读入单个字符到寄存器
while(ch<'0'||ch>'9'){
if(ch=='-')
t=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48); // 移位与异或
// 第十行可以换成 x = x * 10 + ch - '0'
ch=getchar();
}
return x*t;
}
inline void write(int x)
{
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
int main(){
n=read();
for(int i=0;i<n;i++)
{
a[i]=read();
if(a[i]==0)g[i]=g[i-1]+1;
else g[i]=g[i-1];
if(a[i]==1)b[i]=b[i-1]+1;
else b[i]=b[i-1];
}
for(int i=0;i<n;i++)
{
cout<<g[i]<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<b[i]<<" ";
}//*/
///*
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<"i:"<<i;
for(int j=1;j<=n-i;j++)
{
cout<<"j:"<<j<<endl;
girl=g[j]-g[i-1];
boy=b[j]-b[i-1];
cout<<"g[j]:"<<g[j]<<" g[i-1]:"<<g[i-1]<<endl<< "b[j]:"<<b[j]<<" b[i-1]:"<<b[i-1]<<endl;
cout<<endl<<girl<<" "<<boy<<endl;
if(boy==girl)sum=max(sum,j-i);
boy=0;girl=0;
}
}
write(sum);
//*/
return 0;
}
题目:
问题 B: 第2题 偶数段(课程E-A)
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
有 N 个正整数排成一行,请找出最长的一段,其中的数值和为偶数。例如:N=7,数为3,2,5,4,7,8,2。取”2,5,4,7,8,2”这个最长,长度是 6。
输入
第一行 1 个正整数:N 范围[1, 1000000];
第二行有 N 个正整数: 每个整数范围[1, 1000000]。
输出
一个整数。
样例输入 Copy
3
1 3 5
样例输出 Copy
2
我的想法:暴力枚举,TLE,然后我就突发恶疾地想到了前缀和,可以适当减少统计时的枚举量,然后,WA
目测是计算男女数量的时候错了,但死活调不出来