[英]Clearing Test Cases of a competitive alogithm
我一直致力於清除所有測試用例的簡單算法,並且正在尋找原因或應在代碼中進行的修改。 在這里 ,有一個到該問題的內聯鏈接。
可能的解決方案是對兩個數組進行排序,然后添加相應的術語,但它不能完成所有測試用例。
#include <stdio.h>
#include <assert.h>
int main() {
long long n, i;
scanf("%lld", &n);
if (!(n >= 1 && n <= 1000000))
exit(1);
long long s[n], c[n], sum = 0, temp = 0, j;
// taking input for cat and strength array
for (i = 0; i < n; i++) {
scanf("%lld", &s[i]);
if (!(s[i] >= 1 && s[i] <= 1000000))
exit(1);
}
for (i = 0; i < n; i++) {
scanf("%lld", &c[i]);
if (!(c[i] >= 1 && c[i] <= 1000000))
exit(1);
}
// Sorting the C array
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (c[i] > c[j]) {
temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
}
// sorting the S array
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (s[i] > s[j]) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
// Finally adding up the sorted elements
for (i = 0; i < n; i++) {
sum = sum + (s[i] * c[i]);
}
printf("%d ", sum);
getch();
}
c[i], s[i] <= 1e6
您甚至可以線性時間對數組進行排序。 Wrong answers
,請替換printf("%d ",sum);
用printf("%lld ",sum);
sum是long long類型的變量 注意n <= 10^6
。 您的算法的時間復雜度為O(n^2)
。 太慢了。 您肯定需要使用更有效的排序算法。 例如,您可以使用stdlib.h
qsort
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.