求助站外题
  • 板块学术版
  • 楼主_QrSn_
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/9/26 13:00
  • 上次更新2023/10/27 09:54:23
查看原帖
求助站外题
511253
_QrSn_楼主2022/9/26 13:00

代码:

#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

目测是计算男女数量的时候错了,但死活调不出来

2022/9/26 13:00
加载中...