#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <set>
#include <iostream>
#include <map>
#include <set>
#include <string.h>
using namespace std;
void help(vector<int>& vec, char* buf)
{
for(int i = 0; i < strlen(buf);)
{
if(buf[i] != ' ')
{
if(buf[i] == '-')
{
string s = "";
s += buf[i + 1];
int tmp = atoi(s.c_str());
vec.push_back(-1*tmp);
i += 2;
}else
{
string s = "";
s += buf[i];
int tmp = atoi(s.c_str());
vec.push_back(tmp);
i += 1;
}
//vec.push_back()
}else
{
++i;
}
}
}
void find(vector<int>& ivec, vector<int>& mvec)
{
int maxlen = 0;
//vector<int> vec;
for(int i = 0; i < ivec.size(); ++i)
{
int sum = 0;
int len = 0;
int mlen = 0;
int j = i;
int start = j;
vector<int> vec;
while(j < ivec.size())
{
sum += ivec[j];
if(sum == 0)
{
len = j - i + 1;
if(len > mlen)
{
mlen = len;
}
}
++j;
}
for(int i = 0; i < mlen; ++i)
{
vec.push_back(ivec[start + i]);
//printf("%d\n", ivec[j])
}
if(vec.size() >= mvec.size())
{
mvec.clear();
mvec = vec;
}
}
}
int main(int argc,char* argv[])
{
char buf[1024];
memset(buf, 0, 1024);
gets(buf);
vector<int> vec;
vector<int> ivec;
vector<int> mvec;
help(vec, buf);
int maxlen = 0;
find(vec, mvec);
for(int i = 0; i < mvec.size(); ++i)
{
printf("%d ", mvec[i]);
}
printf("\n");
return 0;
}
输入
1 2 3 4 -1 -2 -3 -4
输出
1 2 3 4 -1 -2 -3 -4