计算投影总长度
A 15 18
A 2 7
A 4 6
B 1 10
B 3 5
C 1 3
C 4 5
C 11 13
如上,第一列为标签(列间以tab分隔),其后两列可以看成是x轴上一条线段的两个端点,计算相同标签下线段的投影总长度(即不计算重叠的部分)。
以标签A为例:
最终A标签下线段投影总长度为10-2+18-15=11。
请大侠们指点一下怎么编程序解决吧。
谢谢啦^_^
作者: junlingpang 发布时间: 2011-06-09
作者: yybmsrs 发布时间: 2011-06-09
嗯,得考虑到每一种情况,思路有点儿乱,谢谢参与
作者: junlingpang 发布时间: 2011-06-09
- #!/usr/bin/perl
-
- use strict;
- use warnings;
-
- my %result;
- while (<DATA>) {
- my ($key,$start,$end) = split /\s+/;
- foreach ($start+1 .. $end) {
- $result{$key}{'count'}++ unless ($result{$key}{$_});
- $result{$key}{$_} = 1;
- }
- }
- foreach (keys %result) {
- print "$_\t$result{$_}{'count'}\n";
- }
-
- <STDIN>;
-
- __DATA__
- A 5 10
- A 15 18
- A 2 7
- A 4 6
- B 1 10
- B 3 5
- C 1 3
- C 4 5
- C 11 13
作者: iamlimeng 发布时间: 2011-06-09
作者: zhlong8 发布时间: 2011-06-09
刚试了下,可以的,谢谢了
我再好好研究研究,呵呵
作者: junlingpang 发布时间: 2011-06-09
嗯。对于两个的情况还行,多个并集可能实现起来有点儿麻烦。谢谢提供思路
作者: junlingpang 发布时间: 2011-06-09
嗯。对于两个的情况还行,多个并集可能实现起来有点儿麻烦。谢谢提供思路
junlingpang 发表于 2011-06-09 22:34
对计算机来说多个和两个没有质的区别,它就是做重复运算的。而且写出来的程序具有通用性,抽象级别很高
作者: zhlong8 发布时间: 2011-06-09
嗯,我试一下,谢谢大侠
作者: junlingpang 发布时间: 2011-06-09
这是最简单的递归思路,其实数端点的方法更快
作者: zhlong8 发布时间: 2011-06-09