admin管理员组

文章数量:1529456

题意:给你一个数列,让求这个数列中有多少对和是相等的,输出最大对数

思路:双指针 暴力 题目中的数据范围0< a[i] < n,所以暴力的时候,两个数的和最小是2,最大是2*n

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+ 10;
int a[N] , b[N];
int main()
{
	int t;
	cin >> t;
	while(t --)
	{
		int n , ma = 0; 
		cin >> n;
		for(int i = 0 ; i < n ; i ++) cin >> a[i];
		sort(a , a + n);
		for(int i = 2 ; i <= 2 * n ; i ++)
		{
			int l = 0 , r = n - 1;
			int ans = 0;
			while(l < r)
			{
				if(a[l] + a[r] == i){
					l ++;
					r --;
					ans ++;
				}
				else if(a[l] + a[r] < i){
					l ++;
				}
				else r --;
			}
			ma = max(ma , ans);
		}
		cout << ma << endl;
	}
	return 0;
}

本文标签: Boatscompetition