一个#3TLE,后一个#4TLE,求大佬
查看原帖
一个#3TLE,后一个#4TLE,求大佬
1118380
17780834478KS楼主2024/10/21 21:58
#include<bits/stdc++.h>
using namespace std;
long long int n,c,a[200005],ans=0;
int f(int target)
{
	int left=0;
	int right=n-1;
	while(left<right)
	{
		int mid=left+(right-left)/2;
		if(a[mid]>=target)
		{
			right=mid;
		}
		else
		{
			left=mid+1;
		}
	}
	if(a[left]==target)return left;
	else return -1;
}
int main()
{
	cin>>n>>c;
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n;i++)
	{
		int target=a[i]+c;
		//找到所有的a[j]使tb+c==a[j]
		int j=f(target);
		if(j!=-1||j!=n-1)
		{
			while(j<n&&a[j]==target)
			{
				ans++;
				j++;
			}
		}
		
	}
	cout<<ans;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long int n,c,a[200005],ans=0,flag[2000005],temp=0;
int f(int target)
{
	int left=0;
	int right=n-1;
	while(left<right)
	{
		int mid=left+(right-left)/2;
		if(a[mid]>=target)
		{
			right=mid;
		}
		else
		{
			left=mid+1;
		}
	}
	if(a[left]==target)return left;
	else return -1;
}
int main()
{
	cin>>n>>c;
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n;i++)
	{
		int target=a[i]+c;
		if(flag[target]!=0)
		{
			ans+=flag[target];
			continue;
		}
		//找到所有的a[j]使tb+c==a[j]
		int j=f(target);
		if(j!=-1||j!=n-1)
		{
			while(j<n&&a[j]==target)
			{
				temp++;
				j++;
			}
			ans+=temp;
			flag[target]=temp;
			temp=0;
		}
				
	}
	cout<<ans;
	return 0;
}
2024/10/21 21:58
加载中...