其他分享
首页 > 其他分享> > 1343C - Alternating Subsequence

1343C - Alternating Subsequence

作者:互联网

链接:

https://codeforces.com/problemset/problem/1343/C

题意:

子序列:原序列删减不改变顺序

要求找出最大长度,正负交叉,【正负正负…】,【负正负正…】

最大长度的子序列的和的最大值

解:

思维题和阅读题(读题重点)

题目要求的最大长度是固定条件,所有能取都要取

只要在每个正负块里面取最大值即可

我用integer标记正负,符号不变时记录最大值,符号改变时把最大值加入答案同时更新记录,数组最后加了一个和原最后一位相反的数来弹出最后一个块的最大值

实际代码:

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stdio.h>
#include<memory.h>
#include<limits>
#define csh(a) memset(a,0,sizeof(a))
using namespace std;
typedef long long int ll;
const int Size=2E5+10;
int sz[Size];
int main()
{
	int T;
	cin>>T;
	for(int f=1;f<=T;f++)
	{
		csh(sz);
		int n;cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>sz[i];
		}
		sz[n+1]=1;
		if(sz[n]>0) sz[n+1]*=-1;
		ll sum=0;
		int zf=1;if(sz[1]<0) zf*=-1;
		int temp=INT_MIN;
		for(int i=1;i<=n+1;i++)
		{
			int zfbook=1;
			if(sz[i]<0) zfbook*=-1;
			if(zf==zfbook) temp=max(sz[i],temp);
			else
			{
				sum+=temp;
				temp=sz[i];
				zf*=-1;
			}
		}
		cout<<sum<<endl;
	}
} 

限制:

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

标签:Alternating,sz,int,最大值,1343C,Subsequence,正负,序列,include
来源: https://blog.csdn.net/Fei_WuYan/article/details/120950327