关于 Ubuntu 突然无法连接 Wifi 的解决方案

zh

事实上我也不知道发生了什么,大概是几天前插了“小度 Wifi”的缘故。没有任何征兆地,Wifi 就用不了了。其实我也不知道原理,大概是某个驱动被刷掉了。下面是从网上找来的答案:

sudo apt-get install wicd-daemon

做个记录。

READ MORE

UVa12186 Another Crisis && [Dynamic Arrays in Pascal]

zh

链接:Link 耗时:0.586s

昨晚做的太急了,没时间写总结,正好下午有空,补上。

这是一道典型的树形动态规划,不是很难,但十分坑语言。思路大致如下:

对于第 $i$ 个节点,用 $d(i)$ 表示其上诉所需的最小工人数。若 $i$ 为叶节点,则 $d(i)=1$;否则,遍历求出 $i$ 的子节点所对应的 $d$ 值,并由小到大排序,取出最小的几个相加,即为 $d(i)$。

很容易想到用递归来实现。但对于“子节点的 d 值的排序”实现起来却十分困难:因为事先不知道有多少个数。当然啦,如果是 C++ 组,用 vector 可以轻松搞定,可至于 P 党,实现起来却难上加难。思来想去,决定试试 Pascal 的动态数组。磕磕碰碰调了近 1 个小时,终于 AC 了。

//Accepted
var
tree: array [0..100000] of array of int64;
T: Integer;
f: array [0..100000] of int64;
i,l,n,x:longint;

function min(x,y: int64): int64;
begin
if x<y then exit(x) else exit(y);
end;

procedure sort(var arr: array of int64;l,r:longint); overload;
var
i,j:longint;
m,t: int64;
begin
i := l;
j := r;
m := arr[(l+r) >> 1];
repeat
while arr[i]<m do inc(i);
while arr[j]>m do dec(j);
if i<=j then
begin
t := arr[i];
arr[i] := arr[j];
arr[j] := t;
inc(i);
dec(j);
end;
until i>j;
if i<r then sort(arr, i, r);
if l<j then sort(arr, l, j);
end;

procedure sort(var arr: array of int64); overload;
begin
sort(arr, low(arr), high(arr));
end;
function dp(x: longint): int64;
var
arr: array of int64;
l,i, num: longint;
begin
if f[x] <> 0 then
begin
dp := f[x];
exit;
end;
if length(tree[x]) = 0 then
begin
dp := 1;
f[x] := 1;
exit;
end;
l := length(tree[x]);
SetLength(arr, l);
for i := Low(tree[x]) to High(Tree[x]) do
arr[i] := dp(tree[x][i]);
Sort(arr);
num := (l*T-1) div 100+1;
for i := Low(arr) to num-1 do
f[x] := f[x] + arr[i];
dp := f[x];
end;

begin
assign(input, 'main.in');reset(input);
assign(output,'main.out');rewrite(output);
readln(n, T);
while n>0 do
begin
fillchar(f, sizeof(f), 0);
fillchar(tree, sizeof(tree), 0);
for i := 1 to n do
begin
read(x);
SetLength(tree[x], length(tree[x])+1);
tree[x][high(tree[x])] := i;
end;
readln;
dp(0);
writeln(f[0]);
readln(n, T);
end;
close(input); close(output);
end.

Dynamic Arrays

这里,再总结一下动态数组的用法。

  1. 定义:a: array of [type];
  2. 设置长度: SetLength(a, 10);
  3. 长度加一: SetLength(a, Length(a)+1);
  4. 取得最大、最小下标: High(a), Low(a)

事实上,从 1.1 版本开始 FPC 就支持 Dynamic Arrays 了。所以在 NOIP 竞赛中我们大可放心使用。

READ MORE

UVa11584 Partitioning by Palindromes

zh

这是一道区间型 DP,转移方程很简单,但在实现的过程中却遇见了很多坑,在此记录一下。链接:Link 耗时:0.368s

容易想到,前 $i$ 个数的划分情况可以由 $1,2,3,\ldots,i-1$ 的划分情况来决定。因此很容易得到状态转移方程:

$$d[i] = min(d[i], d[j]+1)$$

其中 $j = 0, 1, 2,\ldots,n-1$ 并且 $s[j+1, i]$ 为回文串,初始条件:$d[i] = i$。$d[i]$ 表示前 i 项的最小划分。这样一来状态转移的复杂度就为 $O(n^2)$。

但状态转移的判断呢?“回文串”是一个复杂的条件,判断一个串是否为回文串需要将该串至少遍历一遍。这样一来时间复杂度就上升为 $O(n^3)$ 了。而事实上在这种算法中有许多无谓的计算,因此我们可以先对字符串进行预处理:用 huiwen[i,j] 表示 $s[i,j]$ 是否为回文串(奇怪的名字。。。)。如此一来,时间复杂度就降为 $O(n^2)$ 了。

var
s: AnsiString;
n, _, i, j, l: integer;
huiwen: array [1..1000, 1..1000] of boolean; //s[i,j]是否为回文串
dp: array [0..1000] of integer; //一定从0开始,否则当整串为回文串时就考虑不到了。

function min(x,y: integer): integer;
begin
if x<y then exit(x) else exit(y);
end;

procedure process(i,j: integer); //对回文串进行预处理
var
mid: Integer;
x,y: integer;
begin
if j = i then
begin
huiwen[i,j] := true;
exit;
end;
mid := i + (j-i+1) shr 1;
x := i;
y := j;
while (x <= mid) and (s[x] = s[y]) do
begin
inc(x);
dec(y);
end;
huiwen[i, j] := x > mid;
end;

begin
//assign(input, 'main.in'); reset(input);
//assign(output, 'main.out'); rewrite(output);
readln(n);
for _ := 1 to n do
begin
readln(s);
l := length(s);
//Pre-process
fillchar(huiwen, sizeof(huiwen), 0);
for i := 1 to l do
for j := i to l do //一定是从i开始,这个错卡了我很久。
process(i, j);
//DP
for i := 1 to l do
begin
dp[i] := i;
for j := 0 to i-1 do
if huiwen[j+1, i] then
dp[i] := min(dp[i], dp[j]+1);
end;
write(dp[l]);
{if _ <>n then }writeln; //吐槽一下:一开始我还谨慎地加上这句以避免行末回车,没想到UVa居然报错了。。看来UVa的比较算法还有待改进啊。
end;

//close(input);close(output);
end.
READ MORE

UVa437 The Tower of Babylon

zh

链接:The Tower of Babylon 耗时:0.015s

这是刘汝佳的紫书中”DAG 中的动态规划”中的习题,我拿它用来熟悉 DAG 中的动态规划。

我们不妨进行逆向考虑:现堆上面的方块,然后考虑在下面进行叠加。这样子一来,影响决策的就只是最下面方块的尺寸了。

对于这种出现了”大套小”这样的二元关系的题,我们可以将其视为一个有向无环图:其中每个节点为一个状态,状态的转移是有固定的方向的(在此题中,状态转移为从小的方块到大的方块)。

但是这道题又不同于平常的 DAG 动态规划:若将边长视为状态的话,则要开一个巨大的数组,这是不可以接受的。因此,我们要换一种思维方式:只记录方块的序号和摆放的方式(如现将边长从小到大进行排序,然后用一个标志 k 表示当前是以第 k 小的边长作为高)。

至此,思路已经清晰了。用 $dp(i, k)$ 表示 “第 i 个方块以第 k 条边为高进行摆放” ,以下给出状态转移方程:

$$dp(i, k) = max\{dp(i, k), dp(j, k_2)\}$$

其中 $j,k_2$ 遍历所有顶面矩形比 $dp(i, k)$ 小的状态。

代码实现首次尝试了 Pascal 中的 object 类型,使其更加工整,但不可避免地损耗了一些性能。

type
Cube = object
a: array [1..3] of longint;
procedure init(x,y,z: longint);
function height(k: integer): longint;
function low(k: integer): longint;
function high(k: integer): longint;
end;

function max(x,y: longint): longint;
begin
if x>y then max := x else max := y;
end;

procedure swap(var x,y: longint);
var
t: longint;
begin
t := x;
x := y;
y := t;
end;

function Cube.height(k: integer): longint;
begin
height := self.a[k];
end;

function Cube.high(k: integer): longint;
begin
case k of
1: high := a[3];
2: high := a[3];
3: high := a[2];
end;
end;

function Cube.low(k: integer): longint;
begin
case k of
1: low := a[2];
2,3: low := a[1];
end;
end;

procedure Cube.init(x, y, z: longint);
begin
if x>y then swap(x,y);
if y>z then swap(y,z);
if x>y then swap(x,y);
a[1] := x;
a[2] := y;
a[3] := z;
end;

var
f: array [1..30, 1..3] of longint;
i,j,m,n,x,y,z: longint;
cnt: longint;
cubes: array [1..30] of Cube;

function dp(id, k: integer): longint;
var
l, h, hi: longint;
i, j: integer;
begin
if f[id, k] > 0 then
exit(f[id, k]);
l := cubes[id].low(k);
hi := cubes[id].height(k);
h := cubes[id].high(k);

f[id, k] := hi;

for i := 1 to n do
begin
//if i = id then continue; //此处在一开始时忘记考虑了立方体有无穷多个这一条件。
for j := 1 to 3 do
begin
if not ((cubes[i].low(j) < l) and (cubes[i].high(j) < h)) then
continue;
f[id, k] := max(f[id, k], dp(i, j)+hi);
end;
end;

dp := f[id, k];
end;

begin
assign(input, 'main.in');reset(input);
assign(output, 'main.out');rewrite(output);
read(n);
cnt := 0;
while n > 0 do
begin
inc(cnt);
for i := 1 to n do
begin
read(x,y,z);
cubes[i].init(x,y,z);
end;
fillchar(f, sizeof(f), 0);

m := 0;
for i := 1 to n do
for j := 1 to 3 do
m := max(m, dp(i, j));

writeln('Case ', cnt, ': maximum height = ', m);

read(n);
end;
close(input);close(output);
end.
READ MORE

NOIP2011 表达式计算

zh

记得 11 年的时候,觉得这道题爆难,根本无从下手。三年后再次回顾,终于 AC 了,就当是对表达式求值和动态规划的复习吧。

题目:Link

// Accepted.
#include <iostream>
#define Mod 10007
using namespace std;

typedef struct {
long long v0; //当前值为 0 的个数
long long v1; //当前值为 1 的个数
char ch; //当前字符
} vertex;

vertex f[100000];

void merge_sum(int p) {
int w0 = f[p-1].v0 * f[p].v0;
int w1 = f[p-1].v0*f[p].v1+f[p-1].v1*f[p].v0+f[p-1].v1*f[p].v1;
f[p-1].v0 = w0 % Mod;
f[p-1].v1 = w1 % Mod;
}

inline void merge_product(int p) //处理当前的值和前一个值取'*'的操作
{
int w0=f[p-1].v0*f[p].v0+f[p-1].v0*f[p].v1+f[p-1].v1*f[p].v0;
int w1=f[p-1].v1*f[p].v1;
f[p-1].v0=w0%Mod;
f[p-1].v1=w1%Mod;
}

int main()
{
int n;
cin>>n;
f[0].v0=f[0].v1=1;
while (n--)
{
now++; //新建一个空位读入新符号
cin>>f[now].ch;
f[now].v0=f[now].v1=1; //初始化当前符号的前面的值 (虽然')'除外,但也不影响)
if (f[now].ch=='+')
{
if (f[now-1].ch=='*') //处理'*'
{
now--;
merge_product(now);
f[now]=f[now+1];
}
if (f[now-1].ch=='+') //处理'+'
{
now--;
merge_sum(now);
f[now]=f[now+1];
}
}
if (f[now].ch=='*')
if (f[now-1].ch=='*') //处理'*'
{
now--;
merge_product(now);
f[now]=f[now+1];
}
if (f[now].ch==')') //处理')'(比较麻烦)
{
now--;
if (f[now].ch=='*')
{
merge_product(now);
now--;
}
if (f[now].ch=='+')
{
merge_sum(now);
now--;
}
now--;
f[now].v0=f[now+1].v0;
f[now].v1=f[now+1].v1;
if (f[now].ch=='*')
{
merge_product(now);
now--;
}
}
}
if (f[now].ch=='*') //处理完了以后,可能还有残留的'*'和'+'
{
merge_product(now);
now--;
}
if (f[now].ch=='+')
{
merge_sum(now);
now--;
}
cout<<f[0].v0;
return 0;
}
READ MORE

Extended 和 Double 的奇怪问题

zh

最近在做一个项目,其中有一段判断一个 Extended 浮点数是否为整数的代码。我用如下方式实现:

function IsInt(F: Extended): Boolean;
begin
result := Trunc(F)-F = 0; //整数部分等于自身
end;

测试了许多样例都过了,唯独这个没过:

IsInt(4.000000002*1000000000); //False

调试时发现: Trunc(F) 居然等于 4000000001!开始以为是精度的问题,找了许多资料也没能解决。后来将 Extended 换成了 Double,就通过了。百思不得其解中。

READ MORE

MySQLDump 导出时不加锁

zh

在 SAE 上进行应用开发时,常常需要导入数据库,这时候就需要用 MySQLDump 工具进行本地数据库导出。

首先 MySQLDump 最基本的语法是这样的 mysqldump <database_name>,执行之后可以在控制台上看到 SQL 源码。但我第一次尝试将导出的源码上传至 SAE 时 SAE 却报错,原因是 SAE 的数据库管理不支持 LOCK 和 UNLOCK 语句。曾有一段时间,我是手动一行行删除 LOCK 语句。。30 多张表那叫一个蛋疼。。后来,我翻阅了 mysqlDump 的 help 文档,发现可以添加这么一个参数--ADD-LOCKS=FALSE。几经尝试后发现果然没有 LOCK 语句了。在此记录下整句命令:

mysqldump --add-locks=FALSE -uroot -p <database_name> > example.sql
READ MORE

窥视香港

zh
mybirth:2eOq+nwSVgLzakGbP0cV/A==:HKqEYTM2VifN0OmWDce2bw==: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
**THIS CONTENT IS ENCRYPTED**
 
DECRYPTING...
READ MORE

最后的晚餐

zh
mybirth:dGAWYcxIRqtSs7JcicXHcg==:csutzkuZwtfAxCkxSAhW8g==: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
**THIS CONTENT IS ENCRYPTED**
 
DECRYPTING...
READ MORE

过路人

zh
mybirth:TsxRsAdfmfwx/C6iEhGzRg==:oQLO/tAYBpqLVTy3rBAq7w==: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
**THIS CONTENT IS ENCRYPTED**
 
DECRYPTING...
READ MORE