一个疑问
查看原帖
一个疑问
668858
GCTfvkbx楼主2024/10/29 14:37

为什么加一个unique就过了?求解释

这是过了的

#include <bits/stdc++.h>
#define int long long

using namespace std ;

const int N = 1e6 + 10 , M = 2e6 + 10 ;

int a[N] , n , T , max1[M] ;

bool vis[M] ;

signed main()
{
	cin.tie(0) ;
	ios::sync_with_stdio(false) ;
	cin >> T ;
	while(T -- )
	{
		int maxn = 0 ;
		int sum = 0 ;
		memset(vis , 0 , sizeof vis) ;
		cin >> n ;
		for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
		memset(max1 , -0x3f , sizeof max1) ;
		for(int i = 1 ; i <= n ; i ++ ) if(a[i] == a[i-1]) sum += a[i] ;
		n = unique(a + 1 , a + 1 + n) - a - 1;
		for(int i = 1 ; i <= n ; i ++ )
		{
			max1[a[i-1]] = max(max1[a[i-1]] , maxn) ;
			max1[a[i-1]] = max(max1[a[i-1]] , a[i] + max1[a[i]]) ;
			maxn = max(maxn , max1[a[i-1]]);
		}
		cout << maxn + sum << endl ;
	}
	return 0 ;
}

这是没过的

#include <bits/stdc++.h>
#define int long long

using namespace std ;

const int N = 1e6 + 10 , M = 2e6 + 10 ;

int a[N] , n , T , max1[M] ;

bool vis[M] ;

signed main()
{
	cin.tie(0) ;
	ios::sync_with_stdio(false) ;
	cin >> T ;
	while(T -- )
	{
		int maxn = 0 ;
		int sum = 0 ;
		memset(vis , 0 , sizeof vis) ;
		memset(max1 , 0 , sizeof max1) ;
		cin >> n ;
		for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
		memset(max1 , -0x3f , sizeof max1) ;
		for(int i = 1 ; i <= n ; i ++ )
		{
			if(a[i] == a[i-1]) sum += a[i] ;
			max1[a[i-1]] = max(max1[a[i-1]] , maxn) ;
			max1[a[i-1]] = max(max1[a[i-1]] , a[i] + max1[a[i]]) ;
			maxn = max(maxn , max1[a[i-1]]);
		}
		cout << maxn + sum << endl ;
	}
	return 0 ;
}
2024/10/29 14:37
加载中...