4177 - 审批系统

题目描述

某市上线了一套自动化政务审批系统。由于该系统由多个分布式子模块构成,其原始生成的事务记录(Record)存在格式不统一、键值对无序等问题,导致审计部门难以直接检索。为了提高审计效率,需要你编写一个重构程序,对 n 条原始记录进行标准化转换并按指定规则全局排序

每条原始记录严格包含 5 个属性字段,以空格分隔,格式如下: date=YYYY-M-D time=H:M:S user=UID action=Operation params=Args

标准化转换规则如下:

  1. 时间戳补全:年份保持 4 位(保证输入的就是 4 位),月份、日期、小时、分钟、秒钟若不足两位,需在前方补 0 补齐至 2 位(例如:2026-3-1 转换为 2026-03-019:2:5 转换为 09:02:05)。
  2. 标识符归一化user 字段中包含的大写英文字母需全部转换为小写,数字保持不变。
  3. 参数域重组params 字段包含若干以 & 连接的键值对(格式为 key=value)。需将所有键值对按照 key字典序升序重新排列并连接。若 params 后面没有内容,则视为空字符串。
  4. 序号生成:重构后的每条记录前需冠以序号及点号(如 1.)。为保证对齐,所有序号的位数必须与最大序号的位数一致,不足部分在前方补 0

全局排序规则: 将所有记录转换完成后,按照以下优先级进行升序排序:

  1. 时间戳:按 YYYY-MM-DD HH:MM:SS 的字典序排列。
  2. 操作用户:若时间相同,按归一化后的 user 字典序排列。
  3. 操作类型:若上述项均相同,按 action 的字典序排列。
  4. 参数字符串:若上述项均相同,按重组后的 params 全字符串字典序排列。
输入

第一行输入一个正整数 n,表示待处理的记录总数。

接下来的 n 行,每行包含一条原始格式的记录,各字段意义见题目描述。

输出

输出共 n 行,为经过标准化处理并排序后的记录。

每行格式为:序号. YYYY-MM-DD HH:MM:SS user action params。(请注意:序号. 这里的 . 后面有一个空格)

样例

输入

4
date=2026-3-1 time=9:2:5 user=Alice action=login params=b=2&a=1
date=2026-3-1 time=9:2:4 user=bob action=refund params=
date=2026-3-1 time=9:2:5 user=alice action=logout params=z=9
date=2026-3-1 time=9:2:5 user=alice action=login params=a=1

输出

1. 2026-03-01 09:02:04 bob refund 
2. 2026-03-01 09:02:05 alice login a=1
3. 2026-03-01 09:02:05 alice login a=1&b=2
4. 2026-03-01 09:02:05 alice logout z=9 

输入

5
date=2026-10-10 time=10:10:10 user=Beta action=process params=z=1&y=2&x=3
date=2026-10-10 time=10:10:10 user=Alpha action=process params=
date=2026-10-10 time=10:10:10 user=Alpha action=process params=v=100
date=2026-10-10 time=10:10:09 user=Gamma action=alert params=msg=critical
date=2026-10-10 time=10:10:10 user=Beta action=access params=

输出

1. 2026-10-10 10:10:09 gamma alert msg=critical
2. 2026-10-10 10:10:10 alpha process
3. 2026-10-10 10:10:10 alpha process v=100
4. 2026-10-10 10:10:10 beta access
5. 2026-10-10 10:10:10 beta process x=3&y=2&z=1

输入

12
date=2026-12-31 time=23:59:59 user=SystemAdmin action=restart params=mode=force&delay=0
date=2026-12-31 time=23:59:59 user=systemadmin action=restart params=delay=0&mode=force
date=2025-1-1 time=0:0:0 user=Root01 action=init params=
date=2026-6-15 time=12:0:0 user=User99 action=upload params=size=1024&type=png&name=test
date=2026-6-15 time=12:0:0 user=user99 action=upload params=name=test&size=1024&type=png
date=2026-6-15 time=8:30:5 user=Guest action=view params=id=101
date=2026-6-15 time=12:0:0 user=user99 action=download params=file=doc
date=2026-1-1 time=10:10:10 user=Alice action=check params=a=1&A=2
date=2026-1-1 time=10:10:10 user=alice action=check params=A=2&a=1
date=2026-1-1 time=10:10:10 user=ALICE action=check params=A=2&a=1
date=2026-1-1 time=10:10:10 user=alice action=alpha params=
date=2026-1-1 time=10:10:10 user=alice action=check params=

输出

01. 2025-01-01 00:00:00 root01 init
02. 2026-01-01 10:10:10 alice alpha
03. 2026-01-01 10:10:10 alice check
04. 2026-01-01 10:10:10 alice check A=2&a=1
05. 2026-01-01 10:10:10 alice check A=2&a=1
06. 2026-01-01 10:10:10 alice check A=2&a=1
07. 2026-06-15 08:30:05 guest view id=101
08. 2026-06-15 12:00:00 user99 download file=doc
09. 2026-06-15 12:00:00 user99 upload name=test&size=1024&type=png
10. 2026-06-15 12:00:00 user99 upload name=test&size=1024&type=png
11. 2026-12-31 23:59:59 systemadmin restart delay=0&mode=force
12. 2026-12-31 23:59:59 systemadmin restart delay=0&mode=force
说明

样例1说明

  1. 原始第 2 条记录时间为 09:02:04,在所有记录中最细,故排序后位列第 1。
  2. 原始第 4 条与第 1 条记录,在补零、user 转小写、params 重组后,其时间戳与 user 均相同。第 4 条的 paramsa=1,第 1 条重组后为 a=1&b=2。因 a=1 的字典序小于 a=1&b=2,故第 4 条排在第 2 位,第 1 条排在第 3 位。
  3. 原始第 3 条记录 actionlogout,在 user 相同的情况下,其字典序大于 login,故排在最后。
  4. 总记录数为 4,序号仅需 1 位,无需额外补零。

数据范围与提示

对于所有测试数据,保证 n \leq 10^5user 仅含字母与数字,action 仅含小写字母。每个 params 内部的 key 互不相同,参数域中的键值对数量不超过 50 个。

数据点编号数据范围特殊性质
1n = 1仅一条记录,且参数域为空
2n \leq 10所有记录的参数域均为空
3n \leq 100原始 user 字段已全部为小写
4n \leq 100所有记录的时间戳字段完全一致
5n \leq 1000记录的参数域中至多包含一个键值对
6n \leq 5000所有的月/日/时/分/秒均需要进行补零操作
7n \leq 10^4参数域中的键值对数量较多
8, 9, 10n \leq 10^4无特殊性质
标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 0
通过人数 0
金币数量 4 枚
难度 基础


上一题 下一题