click (translated) (내가 할당 한 것에는 더 큰 테스트와 더 낮은 시간 제한이 있습니다)와 비슷한 문제가 있습니다. 작업의 빠른 번역 :perl에서 SPOJ 발생 카운팅 속도 문제가 있습니다
주어진 순서로 주어진 숫자가 몇 번 있었는지 확인하는 프로그램을 작성하십시오.
입력 : 주어진 숫자에 얼마나 많은 숫자 순서에있는 숫자의 순서
출력 :
내 솔루션까지 발생 수 :
1 :
#!/usr/bin/env perl
while (<>) {
$in = $_;
@nums = split//, $in, 3;
$what = shift @nums;
shift @nums;
$rest = shift @nums;
$rest = " ".$rest." ";
$sum =() = $rest =~ /(?<=\s)$what(?=\s)/g;
print $sum;
print "\n";
}
2 :
#!/usr/bin/env perl
while (<>) {
$in = $_;
@nums = split//, $in, 3;
$what = shift @nums;
shift @nums;
$rest = shift @nums;
$rest = " ".$rest." ";
if(!$reg{$what}){
$reg{$what} = qr/(?<=\s)$what(?=\s)/;
}
$sum =() = $rest =~ /$reg{$what}/g;
print $sum;
print "\n";
}
는 또한 모든 주어진 제한 시간을 초과, 나는 위의 두 가지보다 더 빠르게 작동합니다 아무것도를 작성하는 방법을 모르고가있어 ... 무력 접근, 해시 테이블, GREP을 시도했다. 어떤 아이디어?
편집 : 복사 목록 치우는 후 (밝혀 숫자는 음수가 될 수 있습니다) :
#!/usr/bin/env perl
while ($line = <>) {
$line =~ s/^(-?\d+) \d+//;
$what = $1;
$sum =() = $line =~/$what\b/g;
print $sum;
print "\n";
}
EDIT2 : http://www.chengfu.net/2005/10/count-occurrences-perl/를 통해 :
print $sum = (($line =~ s/ $1\b//g)+0);
빠른 배 결과 코드 :
print $sum =() = $line =~/$1\b/g;
작품, 감사합니다 :)
얼마나 큰 데이터 집합이며 제한 시간은 무엇입니까? :) – Orbit
spoj 테스트는 비밀입니다.하지만 줄 당 1k 줄과 600 줄의 예제 테스트가 있습니다. 제한 시간은 1 초입니다. 위의 두 가지가 spoj에서 얼마나 오래 실행되는지 확인할 방법이 없습니다. ( –