nhd-seeding.user.js

ZOJ3441. Crack Me II

[cpp + indent, sorting, set_difference]

```cpp ZOJ3441txt.c > ZOJ3441cpp.c
```

```indent ZOJ3441cpp.c
```

ZOJ3440. Detect the Virus II

[regex, topSort]

```# subparta:=fg|g
\$subparta = qr(fg|g);
# parta:=a|b|c
\$parta = qr{a|b|c};
# partb:=d|e[subparta]h
\$partb = qr{d|e(\$subparta)h};
# virus:=[parta][partb][partb]
\$virus = qr{(\$parta)(\$partb)(\$partb)};

printf 'abcdefghijklm' =~ \$virus ? "YES\n" : "NO\n";
printf 'nopqrstuvwxyz' =~ \$virus ? "YES\n" : "NO\n";
```

ZOJ在建站105个月之后迎来了第一百场比赛。

””\\(￣ー￣) (￣ー￣)//””

Let’s Celebrate the 100th Contest on ZOJ!
100A ZOJ3437 Very Hard Problem 6.89% (28/406)
100B ZOJ3438 Tripartite Graph 62.28% (71/114)
100C ZOJ3439 Substitution Cipher 7.86% (36/458)
100D ZOJ3440 Detect the Virus II 0.00% (0/26)
100E ZOJ3441 Crack Me II 2.06% (2/97)
100F ZOJ3442 Complex Calculator 0.00% (0/1)
100G ZOJ3443 Bessel Function II 0.00% (0/0)
100H ZOJ3444 An Unusual Problem 5.12% (2/39)
100I ZOJ3445 1KB 9.09% (4/44)

ACFUN上经常有一些考验暂停党的图集视频，内含各种哔哔和◯◯，但是对于反射弧比较长，暂停苦手的人们来说，只得反复折腾得肉牛满面。而我这种暂停四级考试完全不合格的人更是鸭梨很大。于是想到求助perl, imgseekmplayer，把视频中的所有图片提取出来。思路很简单，就是首先用mplayer将视频内容转为一帧一帧的png或jpg图片(视频分帧)，再用Image::Seek来通过图片内容的相似度比较去除重复图片。写了一段简单的perl代码(wapauser.pl)：

```#!/usr/bin/perl

use strict;
use constant SCORE => -30;
use File::Temp qw(tempfile tempdir);
use Image::Imlib2;
use POSIX ':sys_wait_h';

our (\$id, \$db, \$dir);

sub init {
\$id = 0;
\$dir = tempdir('wapauserXXXX', CLEANUP => 1, DIR => '.');
\$db = tempfile('wapauserXXXX', DIE => \$dir, SUFFIX => 'db');
cleardb();
}

sub gao {
my \$file = shift;
my @result = query_id(\$id, 2);
if (!\$id || \$result[1]->[1] > SCORE) {
++\$id;
link \$file, sprintf './output/%04d.png', \$id;	# or `cp`
} else {
remove_id(\$id);	# important
}
}

sub wapauser {
my (\$file, @args) = @_;
init();
if (my \$pid = fork) {
wait;
opendir(my \$dh, \$dir);
my @pngs = grep {/\.png/} readdir(\$dh);
closedir(\$dh);
for my \$png (sort @pngs) {
gao("\$dir/\$png");
}
} else {
chomp(my \$path = `which mplayer`);
unshift @args, '-vo', "png:outdir=\$dir", '-nosound';
print STDERR "path = \$path\nfile = \$file\n", join("  ", @args), "\n";
close STDOUT;
close STDERR;
exec \$path, \$file, @args;
}
}

wapauser(@ARGV);
```

• 视频分帧结束后才开始图片去重，实际上两步可以同时进行，分步的结果就是得先消耗很大的临时空间来存储成千上万帧的图片，上面的测试就吃掉了4G的硬盘；
• 生成的图片是非常大png，这也是为什么会吃掉那么多磁盘的原因，当然这可以通过设置参数z=<0-9>改成压缩较高的png，或者用参数-vo jpeg，并设置参数quality=<0-100>改成较小的jpg；
• 这种方法只能处理完全静态的图集视频，对其它视频要么无能为力，要么作用很有限；
• 生成的图片质量取决的视频质量，所有除非是高清视频，否则图片质量不会太好；
• SCORE阀值的设置……凡是涉及到阀值的问题总是很头疼的，稍微高点低点，效果可能就差很多，这就像调试蓝田的热水一般（典故见附件）。