Contents

ARST打卡第291周

lc51_N皇后 免费退货?你网购退货的商品到去哪了?【TED演讲】 juicefs平滑升级 samba_ACL对文件系统的要求

Algorithm

lc51_N皇后

思路:

大一读书前看大学mooc上北大郭炜老师的c++课程的时候,就有讲到n皇后的解法。

其实第一层皇后放置的位置,影响着后面每一层的动态规划情况。

但是重新做这题,想不清怎么处理隔一层两层后的影响了,只想到暴力 O(n^n) 并且每次更新数组影响值的方法,重新学习一下。

题解发现思路是一样的,然后就是可以用递归回溯+集合的方式存储列和正负斜率。

更机智的是状态压缩,斜率就用左右移位来扩散,优美啊。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
impl Solution {
    pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
        let mut solutions = Vec::new();
        let mut queens = vec![-1; n as usize];
        let row = vec![".".to_string(); n as usize];

        fn generate_board(queens: &Vec<i32>, n: usize, row: &Vec<String>) -> Vec<String> {
            let mut board = Vec::new();
            for &q in queens.iter() {
                let mut r = row.clone();
                r[q as usize] = "Q".to_string();
                board.push(r.join(""));
            }
            board
        }

        fn solve(
            row: usize,
            columns: usize,
            diagonals1: usize,
            diagonals2: usize,
            n: usize,
            queens: &mut Vec<i32>,
            solutions: &mut Vec<Vec<String>>,
            row_pattern: &Vec<String>,
        ) {
            if row == n {
                let board = generate_board(queens, n, row_pattern);
                solutions.push(board);
            } else {
                let mut available_positions = ((1 << n) - 1) & !(columns | diagonals1 | diagonals2);
                while available_positions != 0 {
                    let position = available_positions & available_positions.wrapping_neg();
                    available_positions &= available_positions - 1;
                    let column = position.trailing_zeros() as usize;
                    queens[row] = column as i32;
                    solve(
                        row + 1,
                        columns | position,
                        (diagonals1 | position) << 1,
                        (diagonals2 | position) >> 1,
                        n,
                        queens,
                        solutions,
                        row_pattern,
                    );
                }
            }
        }

        solve(0, 0, 0, 0, n as usize, &mut queens, &mut solutions, &row);
        solutions
    }
}

Review

免费退货?你网购退货的商品到去哪了?【TED演讲】

直接退货造成物流反复发送,加上可能直接丢弃到垃圾填埋场。

所以演讲者提出绿色转发机制,AI评估品质,把退货退给下一个购买者,参与绿色购买的人可以获得绿色经济积分返现。

Tips

juicefs平滑升级

Share

samba 的 ACL 设置必须后端存储文件系统支持 acl , 否则会出很诡异的问题,可以用如下测试来判断后端是否支持:

The file system, the share will be created on, must support:

  • user and system xattr name spaces.
  • extended access control lists (ACL).

File_System_Support

文档里面的要求要认真看,否则会很惨痛.