-2
私は競争の激しいコーディング(C++)に慣れていませんし、実装に基づいてhackerEarthの問題を練習していました。私は3 diffの配列の集計を見つけるために問題を提出しました。部品。 はここに私のコードですそれが実行に1.010039sを取っ:なぜ、このコードは私のものよりも速いのですか?
int main()
{
long unsigned int n, a[100000], s1 = 0, s2 = 0, s3 = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (i % 3 == 0)
s3 = s3 + a[i];
else if ((i - 2) % 3 == 0)
s2 = s2 + a[i];
else
s1 = s1 + a[i];
}
cout << s1 << " " << s2 << " " << s3;
return 0;
}
はここで最小タイムコードです:
int main()
{
int n;
long unsigned int a[100000];
long unsigned int s1 = 0, s2 = 0, s3 = 0;
int i;
cin >> n;
for (i = 0; i < n; i++) {
cin >> a[i];
}
for (i = 0; i < n; i = i + 3) {
s1 = s1 + a[i];
}
for (i = 1; i < n; i = i + 3) {
s2 = s2 + a[i];
}
for (i = 2; i < n; i = i + 3) {
s3 = s3 + a[i];
}
cout << s1 << " " << s2 << " " << s3 << endl;
return 0;
}
我々はそれを見ることができ、それはまだそこに第2のケースでのループのためにはるかにあり、なぜ高速ですか?
オンラインのコードジャッジエンジンに関する質問はここでは控えてください。テストケースからどこに失敗したのかは誰にも分かりませんが、これは通常は公開されていないためです。テストしたものがあなたのローカル環境で実行されていたとしても、オンラインチャレンジに適用されるいくつかのエッジケースをテストすることができなかったかもしれません。創造的で見つけよう。さらに、オンラインコンテストを不正行為すること以外にも、長期的にそのような質問の価値はないと考えられ、何も学ばれていません。 –
キャッシュのローカリティが原因です。 – SLaks
これは、すべての 'if'が分岐予測子を混同している可能性もあります。 http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-arrayを見てください。 – mindriot