| CCF CAT NAEC 2026 (Final) |
|---|
| Закончено |
在类 Unix 操作系统(如 Linux、macOS)中,每个文件和目录都有一组权限,用于控制谁可以读取、写入或执行它。
普通权限分为三组:所有者(user)、所属组(group)和其他用户(other)。每组权限用三个字符表示,依次对应读($$$\mathtt{\color{orange}{r}}$$$)、写($$$\mathtt{\color{red}{w}}$$$)、执行($$$\mathtt{\color{green}{x}}$$$);若某项权限不存在,则对应位置显示为 -。将三组权限的字符依次拼接,即得到长度为 $$$9$$$ 的符号表示。
例如 $$$\mathtt{\color{orange}{r}}\mathtt{\color{red}{w}}\mathtt{\color{green}{x}}\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}\mathtt{\color{orange}{r}}$$$-- 表示所有者可读、可写、可执行($$$\mathtt{\color{orange}{r}}\mathtt{\color{red}{w}}\mathtt{\color{green}{x}}$$$),所属组可读、可执行($$$\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}$$$),其他用户只读($$$\mathtt{\color{orange}{r}}$$$--)。
除三组普通权限外,还有三种特殊权限:setuid、setgid 和 sticky bit。
一个文件的完整权限可以用四位八进制数表示:从高到低四位依次为特殊权限位 $$$a$$$、所有者权限位 $$$b$$$、所属组权限位 $$$c$$$ 和其他用户权限位 $$$d$$$,每一位都是 $$$0 \sim 7$$$ 的数字。
普通权限位 $$$b$$$、$$$c$$$、$$$d$$$ 与符号表示中的三组字符一一对应:每一位的三个二进制位从高到低依次对应 r、w、x,对应位为 $$$1$$$ 表示具有该权限,为 $$$0$$$ 则没有。
例如 $$$7 = (111)_2$$$ 表示 $$$\mathtt{\color{orange}{r}}\mathtt{\color{red}{w}}\mathtt{\color{green}{x}}$$$,$$$5 = (101)_2$$$ 表示 $$$\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}$$$,$$$4 = (100)_2$$$ 表示 $$$\mathtt{\color{orange}{r}}$$$--。
把后三位 $$$7$$$、$$$5$$$、$$$4$$$ 对应的字符依次拼接,$$$0754$$$ 的符号表示就是 $$$\mathtt{\color{orange}{r}}\mathtt{\color{red}{w}}\mathtt{\color{green}{x}}\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}\mathtt{\color{orange}{r}}$$$--。
特殊权限位 $$$a$$$ 的三个二进制位从高到低依次对应 setuid、setgid、sticky bit。例如 $$$a = 5 = (101)_2$$$ 表示同时设置 setuid 和 sticky bit。三种特殊权限的含义如下:
特殊权限不会增加字符,而是替换符号表示中某个执行位上的字符:
替换规则为:若该位置原为 $$$\mathtt{\color{green}{x}}$$$,setuid 和 setgid 将其替换为小写字母 $$$\mathtt{\color{purple}{s}}$$$,sticky bit 将其替换为小写字母 $$$\mathtt{\color{purple}{t}}$$$;若该位置原为 -,则替换为对应的大写字母 $$$\mathtt{\color{purple}{S}}$$$ 或 $$$\mathtt{\color{purple}{T}}$$$。
例如 $$$4755$$$ 的符号表示为 $$$\mathtt{\color{orange}{r}}\mathtt{\color{red}{w}}\mathtt{\color{purple}{s}}\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}\mathtt{\color{orange}{r}}$$$-$$$\mathtt{\color{green}{x}}$$$:setuid 生效,且所有者组的执行位原为 $$$\mathtt{\color{green}{x}}$$$,故替换为小写 $$$\mathtt{\color{purple}{s}}$$$。
给定一个用四位八进制数表示的权限,请你输出它对应的符号表示。
本题的输入包含多组测试用例。
第一行一个整数 $$$T$$$($$$1 \leq T \leq 4096$$$),表示测试用例的数量。对于每组测试用例:
对于每组测试用例:输出一行一个长度为 $$$9$$$ 的字符串,表示该权限对应的符号表示。
70755475546441777200077775070
rwxr-xr-xrwsr-xr-xrwSr--r--rwxrwxrwt-----S---rwsrwsrwt--Srwx--T
| Название |
|---|


