【发布时间】:2017-04-17 17:50:10
【问题描述】:
我解决了这个问题,但我在在线裁判上得到了 TLE Time Limit Exceed
程序的输出是正确的,但我认为可以改进方法以提高效率!
问题:
给定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;
}
我需要帮助如何用更有效的算法解决它?
【问题讨论】:
-
我认为对输入进行排序会有所帮助。这样你就不必每次都做 O(n^2)。