我解决了这个问题,但是在在线评测中却得到了TLE(时间限制超出)。
程序的输出是正确的,但我认为可以改进方式使其更加高效!
问题:
给定 n
个整数,计算我们可以选择两个元素的方法数,使它们的绝对差小于 32
。
更正式地说,计算成对的数量 (i, j) (1 ≤ i < j ≤ n)
,使得
|V[i] - V[j]| < 32
。其中,|X|
表示 X
的绝对值。
输入:
输入的第一行包含一个整数 T
,表示测试用例的数量 (1 ≤ T ≤ 128)
。
每个测试用例以一个整数 n (1 ≤ n ≤ 10,000)
开始。
下一行包含 n
个整数 (1 ≤ V[i] ≤ 10,000)
。
输出:
对于每个测试用例,输出成对数的数量。
C++代码:
int main() {
int T,n,i,j,k,count;
int a[10000];
cin>>T;
for(k=0;k<T;k++)
{ count=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(i!=j)
{
if(abs(a[i]-a[j])<32)
count++;
}
}
}
cout<<count<<endl;
}
return 0;
}
我需要帮助,如何使用更高效的算法来解决这个问题?