- 论坛徽章:
- 1
|
#!/usr/bin/perl
use warnings;
use strict;
my %records;
my $filename = $ARGV[0];
open FILE, $filename or die "Can't open words $!, $filename\n";
while(<FILE>)
{
chomp;
my ($start, $end) = split;
$records{int $start} = int $end;
}
close FILE;
my @starts = sort {$a <=> $b} keys %records;
my $index = 0;
while($index < $#starts)
{
if ($starts[$index + 1] < $records{$starts[$index]})
{
$records{$starts[$index]} = $records{$starts[$index + 1]} if $records{$starts[$index]} < $records{$starts[$index + 1]};
splice @starts, $index + 1, 1;
$index--;
}
$index++;
}
foreach (@starts)
{
print "$_--$records{$_} ";
}
|
可能写的比较笨,但是功能实现了,简单测试通过。
假设是左闭右开区间,如果是两边都闭的话,如下加个等号就可以了。
if ($starts[$index + 1] <= $records{$starts[$index]})
[ 本帖最后由 qshllxfx 于 2009-9-26 00:48 编辑 ] |
|