免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2583 | 回复: 2
打印 上一主题 下一主题

Google Code Jam 2011 资格赛题目,用perl做了前两道 [复制链接]

论坛徽章:
1
天蝎座
日期:2013-10-28 19:28:43
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-17 11:15 |只看该作者 |倒序浏览
Google Code Jam 2011 资格赛有4道题,貌似几乎没有用perl解题的。试着用perl解了前两道题,写的不好,大家看看。。。
题目描述和数据文件在此http://code.google.com/codejam/contest/dashboard?c=975485#

第一题代码:
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use List::Util qw(max);

  4. open FIL, $ARGV[0];
  5. my $n = 1;
  6. while (<FIL>) {
  7.     if ($_ =~ /[OB]/) {
  8.         my $last_press = 0;
  9.         my ($Olast, $Blast) = (1, 1);
  10.         my ($Otime, $Btime) = (0, 0);
  11.         while ($_ =~ /([OB])\s(\d+)/g) {
  12.             if ($1 eq "O") {
  13.                 my $Odiff = abs($2 - $Olast);
  14.                 $Olast = $2;
  15.                 $Otime = $Otime + $Odiff;
  16.                 $Otime = max $Otime, $last_press;
  17.                 $Otime = $Otime + 1;
  18.                 $last_press = $Otime;
  19.             }
  20.             if ($1 eq "B") {
  21.                 my $Bdiff = abs($2 -$Blast);
  22.                 $Blast = $2;
  23.                 $Btime = $Btime + $Bdiff;
  24.                 $Btime = max $Btime, $last_press;
  25.                 $Btime = $Btime + 1;
  26.                 $last_press = $Btime;
  27.             }
  28.         }
  29.         printf "Case #%d: %d\n", $n, $last_press;
  30.         $n++;
  31.     }
  32. }
  33. close FIL;
复制代码
第二题代码:
  1. #!/usr/bin/perl -w
  2. use strict;

  3. open FIL, "$ARGV[0]";
  4. my $n = 1;
  5. while (<FIL>){
  6.     if ($. != 1){
  7.         my ($c, $d, $string);
  8.         my @combin = ();
  9.         my @oppose = ();
  10.         my @string = ();
  11.         my @line = split(' ', $_);
  12.         $c = $line[0];
  13.         $d = $line[$c + 1];
  14.         @combin = @line[1..$c] if ($c ne "0");
  15.         @oppose = @line[($c+2)..($c+$d+1)] if ($d ne "0");
  16.         $string = $line[-1];
  17.         @string = split('', $string);
  18.         my @o = &invoke(\@combin, \@oppose, \@string);
  19.         my $o = join(', ', @o);
  20.         $o = "[".$o."]";
  21.         printf "Case #%d: %s\n", $n, $o;
  22.         $n++;
  23.     }
  24. }
  25. close FIL;

  26. sub invoke{
  27.     my ($c, $o, $s) = @_;
  28.     my @c = @$c;
  29.     my @o = @$o;
  30.     my @s = @$s;
  31.     my @output = ();

  32.     foreach (@s){
  33.         push(@output, $_);
  34.         if (length(@output > 1) && length(@c > 0)){
  35.             foreach (@c){
  36.                 my @pair = split('', substr $_, 0, 2);
  37.                 @pair = sort(@pair);
  38.                 my $t = substr $_, 2, 1;
  39.                 if (join('', sort(@output[-2, -1])) eq join('', @pair)){
  40.                     pop(@output);pop(@output);push(@output, $t);
  41.                     last;
  42.                 }
  43.             }
  44.         }
  45.         if (length(@o > 0)){
  46.             foreach (@o){
  47.                 my @opp = split('', $_);
  48.                 if (($opp[0] ~~ @output) && ($opp[-1] ~~ @output)){
  49.                     @output = ();
  50.                     last;
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     return @output;
  56. }
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2011-05-17 11:24 |只看该作者
算法和语言没太大关系吧,只要别用 bf 那些变态的语言。

论坛徽章:
1
天蝎座
日期:2013-10-28 19:28:43
3 [报告]
发表于 2011-05-17 11:27 |只看该作者
回复 2# zhlong8
嗯,是没关系,只是想用perl做做。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP