我有一个问题。几天后我一直在为ZCO做准备,我遇到了一个非常简单的问题,我在3秒的时间限制内无法解决这个问题。这就是问题所在:
N队参加火星联赛板球比赛,每场比赛 一对不同的球队完全相互比赛。因此,有 总共(N×(N1))/ 2匹配。专家已经赋予了力量 每个团队,一个正整数。奇怪的是,火星人群喜欢 单场比赛和比赛赚取的广告收入是 两者的优势之间的差异的绝对值 火柴。鉴于N队的优势,找到总数 从所有比赛中获得的广告收入。
例如,假设N为4,团队优势为1,2,3, 4和3分别为3,10,3和5。然后是广告收入 从6场比赛如下:
7,0,2,7,5,2
因此,广告总收入为23。
样品输入4 3 10 3 5样品输出23测试数据在所有子任务中, 每个团队的实力是1到1,000之间的整数。
子任务1(30分):2≤N≤1,000 子任务2(70分):2≤N≤200,000。
限制
时间限制:3s
内存限制:64 MB
所以,我选择了一种简单的算法,可以扫描并找到每个团队的广告收入,与之前的所有其他团队相对应。这相当于 O(n ^ 2)无法通过子任务2.我不认为有可能改进这一点,任何人都可以帮助我吗?
P.S。虽然它没有帮助,但这是我目前的C代码:
#include <stdio.h>
int main(void)
{
long long int n, i, j;
scanf("%lld", &n);
long long int A[n], strength = 0;
for(i = 0;i < n;i++)
{
scanf("%lld", &A[i]);
for(j = i;j >= 0;j--)
{
strength += A[i] > A[j] ? A[i] - A[j] : A[j] - A[i];
}
}
printf("%lld\n", strength);
return 0;
}
答案 0 :(得分:2)
假设我们有10个团队,称他们为A,B,C,......,J从最强到最弱。让我们来看看A和J之间的比赛。它有一个有趣的属性:来自该比赛的收入与其他两场比赛AB和BJ的收入总和相同。哦,还有AC和CJ。并且...哇,通过将AJ乘以9,我们将所有比赛的收入总和与A或J相加!现在我们只剩下8支球队。让我们来看看比赛B vs I.它有一个有趣的属性......数学不是很精彩吗?