D. 连续最大积吗 为什么要留代码呢 因为我缝缝补补的就过了 也不知道咋回事

来源:互联网 发布:java面对对象经典案例 编辑:程序博客网 时间:2024/05/01 04:45
#include <iostream>
using namespace std;
int a[10005];
int main()
{
int n;
cin>>n;
int t=0;
while(n--)
{
int m;
cin>>m;
int i;
for(i=0;i<m;i++)
cin>>a[i];


int x=0,y=0,z=0,l;
for(i=0;i<m;i++)
{
if(a[i]==2) x=x+1;
if(a[i]==-2) y=y+1;
if(a[i]!=0) l=i;
if(a[i]==0||i==m-1&&x+y!=0)
{



if(y%2==0&&z<x+y) z=x+y;
if(y%2!=0&&x==0&&z<y-1) z=y-1;
if(y%2!=0&&x>0)
{
int j,c=0;
j=i-x-y;
if(j<0) j=0;
int q=0,w=0;
for(;j<i;j++)
{
c=c+1;
if(a[j]==-2)
{
w=x+y-c;
break;
}
}


c=0;

if(i==m-1&&a[i]!=0) j=i;
else j=i-1;

for(;j>=i-x-y;j--)
{
c=c+1; 
if(a[j]==-2)
{
q=x+y-c;

break;
}
}
int h;

h=w>q?w:q;
if(z<h) z=h;


}x=0;
y=0;
}
}
t=t+1;
cout<<"Case #"<<t<<": "<<z<<endl;


}
return 0;

}



D. 连续最大积

Time Limit: 1000ms
Memory Limit: 32768KB
64-bit integer IO format:      Java class name:
Submit Status PID: 3550
小明和他的好朋友小西在玩一个游戏,由电脑随机生成一个由-2,0,2三个数组成的数组,并且约定,谁先算出这个数组中某一段连续元素的积的最大值,就算谁赢!

比如我们有如下随机数组:
2 2 0 -2 0 2 2 -2 -2 0 
在这个数组的众多连续子序列中,2 2 -2 -2这个连续子序列的积为最大。

现在小明请你帮忙算出这个最大值。

Input

第一行输入一个正整数T,表示总共有T组数据(T <= 200)。
接下来的T组数据,每组数据第一行输入N,表示数组的元素总个数(1<= N <= 10000)。
再接下来输入N个由0,-2,2组成的元素,元素之间用空格分开。

Output

对于每组数据,先输出Case数。
如果最终的答案小于等于0,直接输出0
否则若答案是2^x ,输出x即可。
每组数据占一行,具体输出格式参见样例。

Sample Input

22-2 0102 2 0 -2 0 2 2 -2 -2 0

Sample Output

Case #1: 0Case #2: 4


0 0