私はこの些細なspoj問題をperlで解決していました。だから私はこの解決策を思いついた:
while ("0 0 0\n" ne ($string = <STDIN>)) {
my @a = split ' ', $string;
$a1 = $a[0];
$a2 = $a[1];
$a3 = $a[2];
if($a2 - $a1 == $a3 - $a2) {
$c = $a2 - $a1;
$a4 = $a3 + $c;
print("AP ", $a4);
}
else {
$c = $a2 / $a1;
$a4 = $a3 * $c;
print("GP ", $a4);
}
print "\n";
}
驚いたことに、制限時間を超えました。Cで同じことを試したところ、最小限の実行時間で正常に実行されました.Cバージョンは次のとおりです。
#include <stdio.h>
int main()
{
int a1, a2, a3, a4, c;
while (1) {
scanf("%d %d %d", &a1, &a2, &a3);
if (a1 == 0 && a2 == 0 && a3 == 0) break;
if (a2 - a1 == a3 - a2) {
c = a2 - a1;
a4 = a3 + c;
printf("AP %d\n", a4);
}
else {
c = a2 / a1;
a4 = a3 * c;
printf("GP %d\n", a4);
}
}
return 0;
}
では、教えてください:
この問題に関して、perl は本当に C よりもそれほど (少なくとも 200 倍) 遅いのでしょうか? 入力と使用される配列などの高レベル構造に関係していると思われます。または、コードにバグがあり、プログラムが停止する可能性があります。